2012-05-14 24 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

これは、インフレータにランダムデータを送るときに見られる典型的なエラーです。実際には、このエラーは、ランダムデータからの時間の約1/4です(最初のバイトの下位3ビットが000または001の場合)。だから私は、何らかの理由でインフレが単に間違ったバイトで始まっていると推測します。

+0

ありがとうございます。これはファイルが壊れているという私の疑惑を確認するのに役立ちました。私はrubyzipの初期段階で誤ってアーカイブに何か書いてしまったと思うが、Mac OSデコンプレッサで以前に解凍してしまったので混乱した。破損したファイルを削除して新しいファイルに置き換えるのは、このトリックでした。 –

関連する問題