不是用gzip格式(Zlib :: GzipFile :: Error) - 在Ruby中解压缩gzip文件

时间:2012-09-25 16:47:20

标签: ruby zlib

我正在尝试使用以下Ruby代码解压缩文件。

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创建压缩文件时,是否需要输入任何标头数据?因为当我使用inflate方法而不是GzipReader时,我得到以下错误 -

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

1 个答案:

答案 0 :(得分:2)

如果您使用的平台不使用LF分隔符,CR + LF,则可能需要以二进制模式打开文件才能阅读:

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

这也应该避免将输入流解释为除8位二进制之外的任何内容。

请务必使用"wb"作为标记以相同的方式打开输出文件。