2012-05-14 101 views
3

我在Vagrant虛擬框中的基本Ubuntu lucid32映像上運行Ruby 1.9.3p194的Rails(3.2.3)應用程序。虛擬箱在Leopard上運行,因爲它值得。我試圖在應用程序中使用rubyzip來解壓zip文件 - 2009_da_lmp.zip。直接從rubyzip庫實例使用的代碼,我可以證實,我可以列出存檔文件內容:什麼可能解釋「無效的存儲塊長度」錯誤?

#f is the absolute path to 2009_da_lmp.zip (string) 
Zip::ZipFile.open(f) { |zf| zf.entries[0] } 
=> 20090101_da_lmp.csv #that is indeed a file in the archive. 

使用從信息庫中的例子更多的代碼,我試圖讓在一個實際的文件歸檔文件:

Zip::ZipInputStream.open(f) { |zis| 
    entry = zis.get_next_entry 
    print "first line of '#{entry.name}' (#{entry.size} bytes:) " 
    puts "'#{zis.gets.chomp}'" } 

=> first line of '20090101_da_lmp.csv' (826610 bytes:) Zlib::DataError: 
    invalid stored block lengths #and a long stack trace I can provide 
           #if that might help 

Mac OS解壓縮實用程序將歸檔文件解壓縮。我想知道它是否是某種與編碼相關的東西(我的語言環境設置爲en_US.UTF-8,因爲在開發中使用PostgreSQL不那麼痛苦),但我不知道如何判斷是否屬於這種情況。我無法找到可能導致此錯誤的信息。

回答

6

這是將隨機數據提供給充氣器時發現的典型錯誤。事實上,從隨機數據(當第一個字節的低三位是000或001)時,你會得到大約1/4的時間錯誤。所以我猜想通貨膨脹只是出於某種原因而從錯誤的字節開始。

+0

感謝馬克。這有助於我確認我懷疑該文件已損壞。我認爲我早期的rubyzip失誤意外地在存檔中寫了一些東西,但之前我已經使用Mac OS解壓縮器成功解壓縮了它,所以我感到困惑。刪除損壞的文件並將其替換爲新的文件就可以實現。 –

相關問題