Ruby如何写Tempfile?

9cbw7uwe  于 2023-06-22  发布在  Ruby
关注(0)|答案(4)|浏览(151)

我试图创建一个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

gblwokeq

gblwokeq1#

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

aoyhnmkz

aoyhnmkz2#

请尝试在读取之前运行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"
u2nhd7ah

u2nhd7ah3#

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
3phpmpom

3phpmpom4#

值得一提的是,调用.rewind是必须的,否则,任何后续的.read调用都只会返回空值。

相关问题