2012-05-14 65 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解压缩器成功解压缩了它,所以我感到困惑。删除损坏的文件并将其替换为新的文件就可以实现。 –

相关问题