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、zipファイルとして再度開くことができなかったという意味でarchive::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);
}

ただし、特に1レベル以上深くなる場合は、メモリを大量に消費することを期待してください。

于 2012-02-17T15:23:43.713 に答える