3

名前に一致するメンバーをアーカイブで検索するために使用する小さなperlスクリプトがあります。これを拡張して、アーカイブ内にアーカイブ(zip、jarなど)でもあるメンバーが見つかった場合に、それらを再帰的にスキャンして、元の目的のパターンを探すようにします。

「Archive::Zip」のドキュメントを調べたところ、これを行う方法がわかったと思いました。「fh()」メソッドと「readFromFileHandle()」メソッドに気づきました。ただし、私のテストでは、アーカイブメンバーに対する「fh()」呼び出しは、メンバーではなく、含まれているアーカイブのファイルハンドルを返すようです。おそらく私はそれを間違ってやっていますが、これを行う方法の例をいただければ幸いです。

4

1 に答える 1

1

アーカイブファイルから抽出せずに、あらゆる種類のアーカイブメンバー(テキスト、画像、または別のアーカイブ)のコンテンツを読み取ることはできません。

表示するメンバーを特定したら、それをディスクファイルに抽出するために呼び出す必要がありますextractMember(または、extractMemberWithoutPathsファイルが一時的なものである場合は、より可能性が高くなります)。次に、古いオブジェクトを開いたまま、新しいArchive::Zipオブジェクトとread新しいファイルを作成できます。

unlink内容をカタログ化したら、おそらくアーカイブファイルが必要になります。


編集

Archive::Zip::MemberRead私は以前にモジュールに出くわしたことがありませんでした。で正しい方向に進んでいるようreadFromFileHandleです。このように動作するはずですが、現時点でテストするのは面倒です。

my $zip = Archive::Zip->new;
$zip->read('myfile.zip');

my $zipfh  = Archive::Zip::MemberRead->new($zip, 'archive/path/to/member.zip');

my $newzip = Archive::Zip->new;
$newzip->readFromFileHandle($zipfh)
于 2012-06-01T17:33:44.323 に答える