如您所见,如果您使用addFile
将磁盘文件添加到存档,则Archive::Zip
添加与文件最初具有相同路径的存档成员。如果您希望将其存储为不同的东西,那么您可以传递第二个参数,该参数将用作创建的存档成员的名称和路径。
出于您的目的,我建议您使用核心File::Basename
模块从文件名中删除路径,并将基本名称作为第二个参数传递。
下面的代码演示。
您需要注意的另一件事是,您不能在 Perl 双引号中使用单反斜杠 - 它们将被视为转义以下字符并简单地消失。您可以在字符串中使用成对的反斜杠,改用单引号,改用正斜杠(Perl 会整理出来),或者如果文件名中没有空格,那么您可以qw()
像我在这个程序中一样使用。
use strict;
use warnings;
use Archive::Zip;
use File::Basename 'basename';
my @files = qw/
C:\Windows\Perl\test1.txt
C:\Windows\Perl\test2.txt
C:\Windows\Perl\test3.txt
/;
my $zip = Archive::Zip->new;
foreach my $file (@files) {
my $member = basename $file;
printf qq{Adding file "%s" as archive member "%s"\n}, $file, $member;
$zip->addFile($file, $member);
}
$zip->writeToFileNamed('zippedFolders.zip');
输出
Adding file "C:\Windows\Perl\test1.txt" as archive member "test1.txt"
Adding file "C:\Windows\Perl\test2.txt" as archive member "test2.txt"
Adding file "C:\Windows\Perl\test3.txt" as archive member "test3.txt"