2014-01-23 165 views
1

作为Perl脚本的一部分,我试图从zip文件夹中读取组件而不解压缩它们。经过一番研究,我开始尝试使用Archive :: Zip :: MemberRead,创建一个test.zip,其中包含一个带有2个文本字段的测试文件夹,它似乎工作正常。我面临的问题是我实际需要解析zip文件的内容,只是在压缩文件中包含所有.txt,.dat,.csv文件而没有任何子目录,这似乎是导致问题的原因。 test.zip包含大约30个不同的压缩文件,包括node_info.txt,并且我一直在使用下面的代码,它在zip文件夹中有一个子目录时工作。用Perl读取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"; 
} 

当我尝试运行它,虽然它的错误无法在位于C未定义的值调用方法“readChunk”:/Perl/lib/Archive/Zip/MemberRead.pm线268有什么不​​同在传递特定成员以供阅读时,我需要做些什么?

+0

你需要使用Perl吗?另一种方法是使用Perl来驱动一个像7zip这样的命令行应用程序。 – David

+0

并非真正需要,但是尽量避免尽可能多的第三方内容,因为这将是人们从多台机器上运行的东西,所以我想尽可能保持依赖关系不变。 – user1401967

回答

0

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

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