2010-04-27 140 views
0

我是從Flash應用程序流式傳輸wav數據。如果我得到的數據,並執行以下操作:FileUtils.mv在Windows中添加換行符

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會這樣做的任何原因,以及是否有方法來改變它的行爲?

回答

4

它看起來像一個二進制文件vs文本文件的問題。你應該設置你的文件的二進制,File#binmode爲:

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

你一定有過在你的第一例的第二個參數open,不是嗎?像「w + b」,可能...「b」代表二進制。

+1

這就是它!謝謝 – Lowgain 2010-04-28 00:14:09

+1

@Lowgrain:很酷。你應該接受答案。此外,請修正您的問題,以便發佈的代碼正常工作(即缺少「w + b」或任何您使用的內容)。 – 2010-04-28 00:21:42