我在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上的问题?
答案 0 :(得分:2)
我认为问题在于您正在以文本形式阅读文件,而不是二进制文件。这两种读取文件的基本模式在换行符,符号EOF等方面有所不同。
尝试使用File.open(file,'rb'){|f|f.read}
代替File.read(file)
。