2012-09-25 67 views
3

我想用下面的Ruby代碼解壓文件。不是gzip格式(Zlib :: GzipFile :: Error) - 在解壓Ruby中的gzip文件時

File.open("file_compressed.gz") do |compressed| 
    File.open("file_decomp","w") do |decompressed| 
    gz = Zlib::GzipReader.new(compressed) 
    result = gz.read 
    decompressed.write(result) 
    gz.close 
    end 
end 

但我得到下面的錯誤 -

not in gzip format (Zlib::GzipFile::Error) 
./features/support/abc/abc_file.rb:44:in `initialize' 

當我在Mac上使用gzip解壓縮命令的同一個文件就產生了正確的無壓縮輸出。 對於下面的命令,我可以看到 -

$file file_compressed.gz 
file_compressed.gz: gzip compressed data, from FAT filesystem (MS-DOS, OS/2, NT) 

我需要把任何頭數據,而我創建的zlib壓縮文件?因爲當我使用充氣的方法,而不是GzipReader我得到下面的錯誤 -

incorrect header check (Zlib::DataError) 
    ./features/support/abc/abc_file.rb:69:in `inflate' 

回答

2

如果你不使用LF分隔符的平臺上,但CR + LF,您可能需要打開文件在二進制模式下讀取:

File.open("file_compressed.gz", "rb") do |compressed| 
    # ... 
end 

這也應該避免將輸入流解釋爲除8位二進制以外的任何內容。

請確保使用"wb"作爲標誌以相同的方式打開您的輸出文件。

+0

它的工作很棒。非常感謝 !!! –