如何在Perl中将zip文件与Archive :: Zip结合起来

时间:2011-12-07 01:00:53

标签: perl zip

我有两个zip文件,A.zipB.zip。我想将A.zip中的任何文件添加到B.zip

如何在Perl中使用Archive::Zip执行此操作?我以为我可以这样做:

my $zipA = Archive::Zip->new();
my $zipB = Archive::Zip->new();

die 'read error' unless ($zipA->read( 'A.zip' ) == AZ_OK );

my @members = $zipA->memberNames();
for my $m (@members) {
 my $file = $zipA->removeMember($m);
 $zipB->addMember($file);
}

但除非我致电writeToFileNamed(),否则不会创建任何文件,如果我确实调用了它,则B.zip会使用A.zip的内容覆盖。< / p>

我可以阅读B.zip的内容,并将它们与A.zip的内容一起写回B.zip,但这似乎效率很低。 (我的问题实际上涉及数百万个压缩成数千个zip文件的文本文件。)

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

使用Archive::Zip

my $zipA = Archive::Zip->new('A.zip');
my $zipB = Archive::Zip->new('B.zip');

foreach ($zipA->members) {
    $zipA->removeMember($_);
    $zipB->addMember($_);
}
$zipB->overwrite;

问题是:

  1. 您需要添加实际成员,而不仅仅是memberNames。
  2. 您需要先阅读B.zip才能添加。
  3. (我会留给你做错误处理等)

答案 1 :(得分:0)

您可以尝试chilkat::CkZip而不是Archive::Zip。它的QuickAppend()方法似乎很有帮助。