41

我正在尝试创建一个 Tempfile 并将一些文本写入其中。但是我在rails控制台中得到了这种奇怪的行为

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

50

您将要在写入临时文件后关闭它。只需在末尾添加一个t.close。我敢打赌该文件已缓冲输出。

于 2013-08-05T07:46:41.317 回答
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

closerewind实际上将内容写入文件。您可能希望在使用后将其删除:

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 回答