in reply to Re: Archive::Zip Simple Issue
in thread Archive::Zip Simple Issue

I tried putting it outside and it seems to get that same error message. I creates each zip file, but the zip file is empty.
#!/usr/bin/perl -w use strict; use warnings; use File::Basename; use Archive::Zip qw( :ERROR_CODES :CONSTANTS ); my $procdate = sprintf "%02d%02d%02d%02d%02d%02d", (localtime)[4]+1, ( +localtime)[3], substr((localtime)[5]+1900,2,2),(localtime)[2], (local +time)[1], (localtime)[0]; my @dipfile = glob('C:/ReportExtract/Director/*.xml'); ##### Zip each file into a zip file for archiving ##### my $targetdir = File::Spec->catdir('C:/ReportExtract/Director/'); my $targetzip = File::Spec->catdir($targetdir, basename($procdate) . " +.zip"); #Need basename. my $zip = Archive::Zip->new(); my $zipdir = $zip->addDirectory($targetdir); foreach my $xml_file (@dipfile) { my $temp = File::Basename::fileparse($xml_file); #Trying it with o +nly the basename. $zipdir = $zip->addFile($temp); }; unless ( $zip->writeToFileNamed($targetzip) eq "AZ_OK" ) {die 'rea +d error';}
Here is the updated code. Dave

Replies are listed 'Best First'.
Re^3: Archive::Zip Simple Issue
by scorpio17 (Canon) on May 30, 2009 at 19:13 UTC

    I think $zip->addFile() needs the complete path, not just the filename. So try this:

    # outside of loop: $dir = "C:/ReportExtract/Director"; # ... # inside your foreach loop: if (-e "$dir/$temp" ) { unless ( $zip->addFile("$dir/$temp") ) { print "Error: failed to add $dir/$temp to archive.\n"; } } else { print "Error: $dir/$temp does not exist!\n"; }

    This also adds error checking, so you can see if it's doing the right thing as it runs.