zip文件中的递归下降?

时间:2012-02-17 15:08:48

标签: perl recursion ziparchive

我正在尝试递归扫描一堆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文件打开。或者我错了吗?

任何提示?

1 个答案:

答案 0 :(得分:0)

你可以这样做:

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);
}

但是期望内存非常密集,特别是如果你的内容超过一个级别。