我想压缩一定长度的文件,并在压缩成功后删除它们。我也只是删除没有压缩的文件。我正在使用下面的代码。删除部分工作正常,但没有发生压缩。
我使用的是base perl,无法使用Archive::Zip
,IO:Compress::Zip
等模块。
sub actionOnFile {
my($fileArray_ref, $action, $directory, $zipname) = @_;
my @fileArray = @$fileArray_ref;
$action = uc($action); #set action string to uppercase
my $cDT = ¤tDateTime;
foreach my $filename (@fileArray) {
if ($action eq "ZIPDEL") { # zip and delete file
my $zipCommand = "WZZIP -p -m \"$directory\\$zipname.$cDT.zip\" \"$directory\\$filename\"";
open ZIP_PROCESS, "$zipCommand |" or $rcode=5;
print LOGFILE " ERROR: Opening zip delete process for $filename: $! $?\n" if ($rcode == 5 || $!);
while (<ZIP_PROCESS>) {
$rcode=3 if ($_=~/error/i or $_=~/warning/i);
# the next line prevents standard WinZip version info from printing to log
my $resultLine = <rim($_) unless ($_=~/WinZip\(R\) Command Line Support Add-On/ || $_=~/Copyright \(c\) WinZip International LLC/);
chomp($resultLine);
print LOGFILE " ...$resultLine\n" if ($resultLine);
}
my $zrc = close ZIP_PROCESS or $rcode=7;
print LOGFILE " ERROR: Closing zip delete process for $filename: $! $?\n" if ($rcode == 7); # this is a necessary error check for open/close zip process
if ($rcode == 3) { #if zip error
print LOGFILE " ERROR: Warning(s) and/or Error(s) during zip/delete process for $filename\n";
$rcode = 6;
next;
}
undef $zipCommand;
} elsif ($action eq "DELETE" && -f "$directory/$filename") { # also verifies file and not directory > unlink will NOT work correctly for dirs
my $dresult = 0;
$dresult = unlink "$directory\\$filename";
if ($dresult == 1) { #if unlink(delete) was successful
print LOGFILE " ...deleted $filename successfully from $directory.\n";
} else {
print LOGFILE " ERROR: During delete of $filename from $directory: $! $?\n";
$rcode = 4;
}
undef $dresult;
} elsif ($action eq "LIST" ) {
print LOGFILE " ...file found: $filename\n";
}
}
}