2014-01-23 200 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文件中存在條目)。