Почему эта простая программа Ruby не печатает то, что я ожидаю? - PullRequest
1 голос
/ 28 мая 2010

У меня есть это:

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 ]

6 голосов
/ 28 мая 2010

Проблема в том, что вы делаете 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
2 голосов
/ 28 мая 2010

Вы, вероятно, находитесь в конце потока, где больше не осталось байтов. После записи и перед чтением следует перемотать файл (открыть заново или перейти к позиции 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
...