0

我正在尝试递归扫描一堆 zip 文件,当然我正在使用 archive::zip。我想避免在临时文件夹中扩展存档的内容。我希望能够使用类似(近乎伪代码)的东西:

sub CALLMYSELFAGAIN .....

my @members = $currentZipFile->members();
while(my $member = pop @members){                       
    if ($member->isTextFile()){
        push @content, $member->contents();
    }elsif(isZipFile($member->fileName())){
        CALLMYSELFAGAIN($member);
    }

问题是,$member->can("memberNames"))返回 false,所以$member不是 archive::zip,因为我无法将它作为 zip 文件再次打开。还是我错了?

有什么提示吗?

4

1 回答 1

1

你可以这样做:

elsif (isZipFile($member->filename)) {
    my $contents = $currentZipFile->contents($member);
    open my $fh, '<', \$contents; # In-memory filehandle
    my $child_zip = Archive::Zip->new;
    $child_zip->readFromFileHandle($fh);
    CALLMYSELFAGAIN($child_zip);
}

但预计这会占用大量内存,尤其是当您深入一层以上时。

于 2012-02-17T15:23:43.713 回答