Frage

I am trying to create a Tempfile and write some text into it. But I get this strange behavior in 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                # => ""

I also tried cat /tmp/test_temp20130805-28300-1u5g9dv-0 but the file is empty.

Am I missing anything? Or what's the proper way to write to Tempfile?

FYI I'm using ruby 1.8.7

War es hilfreich?

Lösung

You're going to want to close the temp file after writing to it. Just add a t.close to the end. I bet the file has buffered output.

Andere Tipps

Try this run t.rewind before read

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"

close or rewind will actually write out content to file. And you may want to delete it after using:

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

It's worth mentioning, calling .rewind is a must otherwise any subsequent .read call will just return empty value

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top