2012-02-29 6 views
1

私はRubyのファイル処理に慣れていません。私が遭遇した問題は、バイナリファイルを読み書きすることで、まったく同じファイルが生成されないということです。Rubyのファイルコピーで別のファイルが生成される

clone = Tempfile.new(tempfile.original_filename)
FileUtils.copy_stream(tempfile, clone)
clone.flush

その下の画像から、私はそれがファイルであることを報告した画像ビューアで新しく作成されたファイルを開こうとすると、それは、正確なファイルコピーではないことは明らかです腐敗している。私はclone.write(tempfile.read)などのように違う方法でファイルをコピーしようとしましたが、成功しませんでした。

File compare *ファイルビューアは、元のファイルがANSI Dos/Windowsで、クローンがANSI Macintoshであることも示しています。ファイルサイズも約200バイト異なります。

私が達成しようとしているのは、実際にはTempfileを2回使用しているだけです。ファイルはレール経由でアップロードされ、Tempfileとして私に与えられます。私はそれを2つの異なる快適なサービスに提出し、RestClient.postは自動的にファイルを閉じます。別のオプションは、ファイルを閉じることができないように、RestClientにメモリストリームクローンを送信することです。 RestClientにFile.open(tempfile.path)を提出すると、同じ破損ファイルが生成されます。これは、読み込みが問題であり、書き込みではないことを示します。元のTempfileオブジェクトをRestClientに送信すると、完全に動作しますが、閉じられて削除され、再度送信することはできません。

助けてください!

よろしく、
ピエール

答えて

3

それは、六角、これらのファイルのビューの代わりに、テキストエディタのintepretationを見るためにはるかに役立つだろう。私の推測では、少なくとも1つのファイルがバイナリモードで開かれていないということです。 Ruby 1.9では、読み書き用のファイルを開き、バイナリの一時ファイルを作成するには、それぞれ

open(filename, 'rb') 
open(filename, 'wb') 
Tempfile.new(filename, :binmode => true) 

を試してください。

+0

私の最終的な解決策は、私は別の一時ファイルを作成しないことです、私は単にfile.openをbinmodeに渡します。 –

関連する問題