Копия файла Ruby создает другой файл - PullRequest
1 голос
/ 29 февраля 2012

Я не очень знаком с обработкой файлов в ruby.Проблема, с которой я столкнулся, заключается в том, что чтение и запись бинарного файла не дают точно такой же файл.

clone = Tempfile.new(tempfile.original_filename)
FileUtils.copy_stream(tempfile, clone)
clone.flush

Из рисунка ниже видно, что это не точная копия файла, когда я пытаюсь открыть вновь созданный файл в программе просмотра изображений, он сообщает, что файл поврежден.Я попытался скопировать файл различными способами, например clone.write(tempfile.read) и т. Д., Но безуспешно.

File compare * Средство просмотра файлов также указывает, что оригинал - ANSI Dos / Windows, а клон - ANSI.Macintosh.Размер файла также отличается примерно на 200 байт.

На самом деле я пытаюсь просто использовать Tempfile дважды.Файл загружается через рельсы и передается мне как Tempfile.Я хочу отправить его двум различным службам restful, и RestClient.post автоматически закроет файл.Другой вариант - отправить клону своего рода в потоке памяти RestClient, чтобы он не мог закрыть мой файл.Если я отправляю File.open(tempfile.path) в RestClient, он выдает тот же поврежденный файл, это указывает на то, что проблема заключается в чтении, а не в записи.Если я отправляю исходный объект Tempfile в RestClient, он работает отлично, но затем он закрывается и удаляется, и я не могу отправить его снова.

Пожалуйста, помогите!

С уважением,
Pierre

1 Ответ

3 голосов
/ 29 февраля 2012

Было бы гораздо полезнее увидеть шестнадцатеричное представление этих файлов вместо интерпретации текстового редактора. Я предполагаю, что хотя бы один из файлов не открывается в двоичном режиме. В Ruby 1.9 попробуйте

open(filename, 'rb')
open(filename, 'wb')
Tempfile.new(filename, :binmode => true)

для открытия файла для чтения / записи и создания двоичного временного файла соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...