FileUtils.mv добавление разрывов строк в Windows - PullRequest
0 голосов
/ 28 апреля 2010

Я передаю wav-данные из флеш-приложения. Если я получу данные и сделаю следующее:

f = File.open('c:/test.wav', 'wb')
f << wav_data.pack('c'*wav_data.length)
f.close

WAV-файл работает отлично. Если я сделаю это:

f = Tempfile.new('test.wav')
f << wav_data.pack('c'*wav_data.length)
f.close
FileUtils.mv(f.path, 'c:/')

Файл есть, но звучит все искажено. Проверка в шестнадцатеричном редакторе показывает, что везде, где рабочий файл имел 0A (или \ n), искаженная версия имела 0D0A (или \ r \ n)

Я использую это в сочетании с rails + paperclip и собираюсь использовать комбинацию Heroku и S3 для живого приложения, поэтому я надеюсь, что эта проблема решится сама собой, но я бы хотел, чтобы это работало на моей локальной машине в настоящее время.

Кто-нибудь знает, по какой причине FileUtils.mv будет делать это, и есть ли способ изменить его поведение?

1 Ответ

4 голосов
/ 28 апреля 2010

Похоже, двоичный файл против проблемы текстового файла. Вы должны установить свой файл в двоичный файл с File#binmode как в:

f = Tempfile.new('test.wav')
f.binmode
f << data

У вас, должно быть, был второй аргумент open в вашем первом примере, нет? Что-то вроде "w + b", вероятно ... "b" означает двоичный файл.

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