потеря данных при архивировании файлов - PullRequest
2 голосов
/ 10 февраля 2011

Я использую rubyzip для Windows, чтобы заархивировать каталог. Когда я распаковываю архив, некоторые файлы меньше, чем были.

Зиппинг должен быть операцией без потерь, поэтому мне интересно, почему это происходит.

Вот код, который я использую:

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 на linux с теми же файлами работает, как и ожидалось - все файлы имеют одинаковый размер.

Есть идеи, почему это проблема с Windows?

1 Ответ

2 голосов
/ 10 февраля 2011

Мне кажется, проблема в том, что вы читаете файлы как текст, а не как двоичные файлы.Эти два основных режима чтения файлов имеют различие в таких вещах, как разрывы строк, символы EOF и т. Д.

Попробуйте File.open(file,'rb'){|f|f.read} вместо File.read(file).

...