为什么这个简单的Ruby程序不会打印出我期望的内容?

时间:2010-05-27 21:29:03

标签: ruby temporary-files

我有这个:

require 'tempfile'
t = Tempfile.new('test-data')
t.open
t.sync = true
t << "apples"
t.puts "bananas"
puts "contents are [#{t.read}] (#{t.size} bytes)"
t.close

打印:

contents are [] (14 bytes)

为什么内容实际上没有显示?我在Ruby 1.9.2上。

2 个答案:

答案 0 :(得分:6)

问题是你在文件中的当前IO指针处执行了read,该指针在写入之后已经结束了。您需要在rewind之前执行read。在您的示例中:

require 'tempfile'
t = Tempfile.new('test-data')
t.open
t.sync = true
t << "apples"
t.puts "bananas"
t.rewind
puts "contents are [#{t.read}] (#{t.size} bytes)"
t.close

答案 1 :(得分:2)

您可能在流的末尾,没有剩余字节。写完之后,在阅读之前你应该倒回文件(重新打开或寻找位置0)。

require 'tempfile'
t = Tempfile.new('test-data')
t.open
t.sync = true
t << "apples"
t.puts "bananas"
t.seek 0
puts "contents are [#{t.read}] (#{t.size} bytes)"
t.close