summaryrefslogtreecommitdiff
path: root/examples/updateZip.pl
diff options
context:
space:
mode:
Diffstat (limited to 'examples/updateZip.pl')
-rw-r--r--examples/updateZip.pl33
1 files changed, 33 insertions, 0 deletions
diff --git a/examples/updateZip.pl b/examples/updateZip.pl
new file mode 100644
index 0000000..6b87d23
--- /dev/null
+++ b/examples/updateZip.pl
@@ -0,0 +1,33 @@
+# Shows how to update a Zip in place using a temp file.
+# $Revision: 1.1 $
+#
+use Archive::Zip qw(:ERROR_CODES);
+use File::Copy();
+
+my $zipName = shift || die 'must provide a zip name';
+my @fileNames = @ARGV;
+die 'must provide file names' unless scalar(@fileNames);
+
+# Read the zip
+my $zip = Archive::Zip->new();
+die "can't read $zipName\n" unless $zip->read($zipName) == AZ_OK;
+
+# Update the zip
+foreach my $file (@fileNames) {
+ $zip->removeMember($file);
+ if (-r $file) {
+ if (-f $file) {
+ $zip->addFile($file) or die "Can't add $file to zip!\n";
+ } elsif (-d $file) {
+ $zip->addDirectory($file) or die "Can't add $file to zip!\n";
+ } else {
+ warn "Don't know how to add $file\n";
+ }
+ } else {
+ warn "Can't read $file\n";
+ }
+}
+
+# Now the zip is updated. Write it back via a temp file.
+
+exit($zip->overwrite());