FileUtils.mv在Windows中添加换行符

时间:2010-04-27 22:44:29

标签: windows ruby

我正在从Flash应用程序中传输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 个答案:

答案 0 :(得分:4)

它看起来像二进制文件与文本文件问题。您应该使用File#binmode将文件设置为二进制文件,如下所示:

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

你的第一个例子中你必须有open的第二个参数,不是吗?像“w + b”这样的东西,可能......“b”代表二进制。