我有一个小的 Perl 脚本,用于在文件中搜索与名称匹配的成员。我想增强这一点,以便如果它在存档中发现任何也是存档的成员(zip、jar 等),它将递归扫描这些成员,寻找原始所需的模式。
我浏览了“Archive::Zip”文档,我想我知道如何做到这一点。我注意到“fh()”和“readFromFileHandle()”方法。但是,在我的测试中,对存档成员的“fh()”调用似乎返回包含存档的文件句柄,而不是成员。也许我做错了,但我希望有一个如何做到这一点的例子。
最佳答案
如果不从存档文件中提取内容,则无法读取任何类型的存档成员的内容(无论是文本、图片还是其他存档)。
确定要查看的成员后,必须调用 extractMember
(或者,更可能的是,如果文件是临时文件,则调用 extractMemberWithoutPaths
)来提取它到磁盘文件。然后,您可以创建一个新的 Archive::Zip
对象并读取
新文件,同时保持旧文件打开。
在对存档文件的内容进行编目后,您可能会想要取消链接
存档文件。
编辑
我没有遇到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)
关于perl - 如何使用 perl Archive::Zip 递归地遍历存档文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10854809/