【问题标题】:Reading zip file contents with Perl使用 Perl 读取 zip 文件内容
【发布时间】:2014-01-23 18:55:49
【问题描述】:

作为 Perl 脚本的一部分,我正在尝试从 zip 文件夹中读取组件,而无需解压缩它们。经过一番研究,我开始尝试使用 Archive::Zip::MemberRead 并创建了一个 test.zip ,其中包含一个带有 2 个文本字段的测试文件夹,它似乎工作正常。我面临的问题是我实际上需要解析内容的 zip 文件只有 zip 中的所有 .txt、.dat、.csv 文件,而没有似乎导致问题的子目录。 test.zip 包含大约 30 个不同的压缩文件,包括 node_info.txt,我一直在使用下面的代码,当 zip 文件夹中有一个子目录时它可以工作。

my $zip = Archive::Zip->new("C:\\test.zip");
my $fh  = Archive::Zip::MemberRead->new($zip,'node_info.txt');
while (defined(my $line = $fh->getline()))
{
    print $line . "\n";
}

当我尝试运行它时出现错误 Can't call method "readChunk" on an undefined value at C:/Perl/lib/Archive/Zip/MemberRead.pm 第 268 行。我需要做些不同的事情吗当传递要读取的特定成员时?

【问题讨论】:

  • 您只需要使用 Perl 吗?另一种方法是使用 Perl 来驱动像 7zip 这样的命令行应用程序。
  • 不是必需的,但尽量避免使用第 3 方的东西,因为人们会在多台机器上运行它,所以我希望尽可能降低依赖关系。

标签: perl zip


【解决方案1】:

我建议在指定的 zip 文件中没有“node_info.txt”。如果我尝试访问不存在的条目,至少这正是我得到的错误消息。请注意,Zip 文件中的名称可能区分大小写,这与它们在 Windows 文件系统中的方式相反。

添加一些错误检查可能真的很有帮助,例如检查 $zip 是否为真(Zip 文件可以打开)和 $fh 是否为真(Zip 文件中存在条目)。

【讨论】:

    猜你喜欢
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多