2010-04-27 74 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