2011-02-10 113 views
2

我在Windows上使用rubyzip壓縮目錄。 當我解壓檔案時,一些文件比它們小。壓縮文件時丟失數據

拉鍊應該是一個無損操作,所以我想知道爲什麼會發生這種情況。

這裏是我使用的代碼:

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

在jruby上運行相同的代碼,使用相同的文件在預期的工作 - 所有的文件是相同的大小。

任何想法爲什麼這是Windows上的問題?

回答

2

我認爲問題在於,您正在以文本形式讀取文件,而不是二進制文件。這兩種閱讀文件的基本模式在換行符,符號EOF等等方面有所不同。

嘗試File.open(file,'rb'){|f|f.read}而不是File.read(file)

+0

+1 Windows需要了解二進制文件。爲了安全起見,「b」應該在那裏。 – 2011-02-10 14:58:34