2011-02-10 12 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

同じファイルでlinuxのjrubyで同じコードを実行すると、期待どおりに動作します - すべてのファイルは同じサイズです。

これはなぜWindowsで問題になるのですか?

答えて

2

私は問題は、ファイルをバイナリファイルではなくテキストとして読み込んでいることだと思います。これらの2つの基本的な読み込みモードでは、改行や記号EOFなどの違いがあります。

File.read(file)の代わりにFile.open(file,'rb'){|f|f.read}を試してください。

+0

+1 Windowsはバイナリファイルについて知っておく必要があります。安全のために、 "b"がそこにあるはずです。 –

+0

ありがとうこれはトリックをした:) –

関連する問題