我正在尝试创建一个Tempfile并在其中写入一些文本。但是我在rails console中得到了这种奇怪的行为
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
答案 0 :(得分:39)
写入后,您将要关闭临时文件。只需在末尾添加t.close
即可。我打赌文件缓冲了输出。
答案 1 :(得分:19)
试试这个
在阅读之前运行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"
答案 2 :(得分:6)
值得一提的是,调用.rewind
是必须的,或任何后续.read
调用只会返回空值
答案 3 :(得分:6)
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