【问题标题】:What might explain an "invalid stored block lengths" error?什么可以解释“无效的存储块长度”错误?
【发布时间】:2012-05-14 02:55:57
【问题描述】:

我正在 Vagrant 虚拟框中的基本 Ubuntu lucid32 映像上运行带有 Ruby 1.9.3p194 的 Rails (3.2.3) 应用程序。虚拟盒子在 Leopard 上运行,物有所值。我正在尝试在应用程序中使用 ruby​​zip 来解压缩 zip 存档 - 2009_da_lmp.zip。直接使用 ruby​​zip 存储库中的示例代码,我可以确认我可以列出存档文件的内容:

#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 的痛苦),但我不知道如何判断是否是这种情况。我找不到任何可能导致此错误的信息。

【问题讨论】:

    标签: ruby zlib rubyzip


    【解决方案1】:

    这是向充气机提供随机数据时发现的典型错误。事实上,你会在大约 1/4 的时间从随机数据中得到这个错误(当第一个字节的低三位是 000 或 001 时)。所以我猜想通货膨胀只是出于某种原因从错误的字节开始。

    【讨论】:

    • 谢谢马克。这帮助我确认了我对文件已损坏的怀疑。我认为我早期使用 ruby​​zip 的失误不小心在存档中写入了一些东西,但是我之前已经成功地使用 Mac OS 解压缩器解压缩了它,所以我很困惑。删除损坏的文件并用新文件替换它就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 2020-01-31
    • 1970-01-01
    • 2019-12-07
    • 2014-10-03
    • 2020-07-05
    相关资源
    最近更新 更多