我正在尝试递归扫描一堆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文件打开。或者我错了吗?
任何提示?
答案 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);
}
但是期望内存非常密集,特别是如果你的内容超过一个级别。