2

Windowsでrubyzipを使用してディレクトリを圧縮しています。アーカイブを解凍すると、一部のファイルが以前よりも小さくなっています。

zipはロスレス操作である必要があるので、なぜこれが発生しているのか疑問に思います。

これが私が使用しているコードです:

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で問題になる理由はありますか?

4

1 に答える 1

2

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

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

于 2011-02-10T13:47:43.337 に答える