我有一个小的perl脚本,用于搜索存档以查找与名称匹配的成员。我想要增强这一点,以便如果它在档案中发现任何也是档案(zip,jar等)的成员,它将递归扫描那些,寻找原始的所需模式。
我查看了“Archive :: Zip”文档,我以为我看到了如何做到这一点。我注意到了“fh()”和“readFromFileHandle()”方法。但是,在我的测试中,似乎对归档成员的“fh()”调用返回包含存档的文件句柄,而不是成员。也许我做错了,但我很欣赏如何做到这一点的一个例子。
答案 0 :(得分: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)