41

Tempfile を作成してテキストを書き込もうとしています。しかし、レールコンソールでこの奇妙な動作が発生します

t = Tempfile.new("test_temp") # => #<File:/tmp/test_temp20130805-28300-1u5g9dv-0>
t << "Test data"              # => #<File:/tmp/test_temp20130805-28300-1u5g9dv-0>
t.write("test data")          # => 9
IO.read t.path                # => ""

私も試しcat /tmp/test_temp20130805-28300-1u5g9dv-0ましたが、ファイルは空です

何か不足していますか?または、に書き込む適切な方法は何Tempfileですか?

参考までに、Ruby 1.8.7 と Rails 2.3.12 を使用しています。

4

4 に答える 4

22

t.rewind読む前にこの実行を試してください

require 'tempfile'
t = Tempfile.new("test_temp")
t << "Test data"
t.write("test data") # => 9
IO.read t.path # => ""
t.rewind
IO.read t.path # => "Test datatest data"
于 2013-08-05T07:49:35.607 に答える
8

closeまたは、rewind実際にコンテンツをファイルに書き出します。そして、あなたはそれを使用した後にそれを削除したいかもしれません:

file = Tempfile.new('test_temp')
begin
  file.write <<~FILE
    Test data
    test data
  FILE
  file.close

  puts IO.read(file.path) #=> Test data\ntestdata\n
ensure
  file.delete
end
于 2016-07-15T22:59:09.240 に答える
7

言及する価値があります。呼び出し.rewindは必須です。それ以外の場合、後続の.read呼び出しは空の値を返すだけです

于 2015-11-05T23:34:01.803 に答える