我对 ruby 中的文件处理不太熟悉。我遇到的一个问题是读取和写入二进制文件不会生成完全相同的文件。
clone = Tempfile.new(tempfile.original_filename)
FileUtils.copy_stream(临时文件,克隆)
克隆.flush
从下图中可以清楚地看出,它不是精确的文件副本,当我尝试在图像查看器中打开新创建的文件时,它报告该文件已损坏。我尝试过以不同的方式复制文件,例如 clone.write(tempfile.read)
等,但没有成功。
*文件查看器还指示原始文件是 ANSI Dos/Windows,克隆文件是 ANSI Macintosh。文件大小也相差约 200 字节。
我想要完成的实际上只是简单地使用临时文件两次。文件通过 Rails 上传并作为临时文件提供给我。我想将其提交到两个不同的 Restful 服务,并且 RestClient.post 会自动关闭文件。另一种选择是将某种内存流克隆提交给 RestClient,以便它无法关闭我的文件。如果我向 RestClient 提交 File.open(tempfile.path) ,它会生成相同的损坏文件,这表明读取是问题,而不是写入。如果我将原始 Tempfile 对象提交给 RestClient,它可以正常工作,但随后它会被关闭并删除,我无法再次发送它。
请帮忙!
问候,
皮埃尔
最佳答案
查看这些文件的十六进制 View 而不是文本编辑器的解释会更有帮助。我的猜测是至少有一个文件没有以二进制模式打开。在 Ruby 1.9 中,尝试
open(filename, 'rb')
open(filename, 'wb')
Tempfile.new(filename, :binmode => true)
分别用于打开文件进行读/写和创建二进制临时文件。
关于ruby-on-rails - Ruby 文件复制生成不同的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9501457/