压缩文件时丢失数据

时间:2011-02-10 11:06:40

标签: ruby rubyzip

我在windows上使用rubyzip来压缩目录。 当我解压缩存档时,一些文件比它们小。

Zipping应该是一个无损操作,所以我想知道为什么会发生这种情况。

以下是我正在使用的代码:

require 'rubygems'
require 'find'
require 'zip/zip'

output = "c:/temp/test.zip"
zos = Zip::ZipOutputStream.new(output)

path = "C:/temp/profile"
::Find.find(path) do |file|
  next if File.directory?(file)
  entry = file.sub("#{path}/", '')

  zos.put_next_entry(entry)
  zos << File.read(file)
end
zos.close

有问题的特定文件来自firefox配置文件。 cert8.db和key3.db

在linux下的jruby下使用相同的文件运行相同的代码按预期工作 - 所有文件大小相同。

为什么这是Windows上的问题?

1 个答案:

答案 0 :(得分:2)

我认为问题在于您正在以文本形式阅读文件,而不是二进制文件。这两种读取文件的基本模式在换行符,符号EOF等方面有所不同。

尝试使用File.open(file,'rb'){|f|f.read}代替File.read(file)