diff options
Diffstat (limited to 'examples/updateZip.pl')
-rw-r--r-- | examples/updateZip.pl | 33 |
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()); |