我正在编写一个脚本,当成员名称与模式匹配时,会使用给定的搜索字符串来grep zip档案成员的内容。
我有以下子处理单个存档(该脚本可以在命令行上使用多个存档):
sub processArchive($$$$) {
my ($zip, $searchstr, $match, $zipName) = @_;
print "zip[$zip] searchstr[$searchstr] match[$match] zipName[$zipName]\n";
my @matchingList = $zip->membersMatching($match);
my $len = @matchingList;
if ($len > 0) {
print $zipName . ":\n";
for my $member (@matchingList) {
print "member[$member]\n";
print "textfile[" . $member->isTextFile() . "] contents[" . $member->contents() . "]\n";
if ($member->isTextFile()) {
print "Is a text file.\n";
}
else {
print "Is not a text file.\n";
}
my @matchingLines = grep /$searchstr/, $member->contents();
my $len = @matchingLines;
if ($len > 0) {
print @matchingLines;
}
}
}
}
逻辑还没有完成。我首先尝试调用" isTextFile()"看看它做了什么。我必须做错事,因为我得到了#34;不是文本文件"对于至少一个明显是文本文件的成员。
我还注意到,当我从" isTextFile()"打印返回值时,它总是一个空字符串。这是我应该期望的印刷"真正的"或"假"价值,还是其他的错误?
答案 0 :(得分:2)
从ZIP文件中的标志中读取“文本文件”状态。许多归档工具没有正确设置此标志,因为它很少使用,并且对正常使用没有影响。
如果您确实需要检查文件是否包含文本,则需要将其解压缩并自行查看。