Question

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

Was it helpful?

Solution

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.

OTHER TIPS

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top