web-dev-qa-db-fra.com

Ruby comment écrire dans Tempfile

J'essaie de créer un Tempfile et d'y écrire du texte. Mais je reçois ce comportement étrange dans la console Rails

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                # => ""

J'ai aussi essayé cat /tmp/test_temp20130805-28300-1u5g9dv-0 mais le fichier est vide

Suis-je en train de manquer quelque chose? Ou quelle est la bonne façon d'écrire dans Tempfile?

Pour info j'utilise Ruby 1.8.7 et Rails 2.3.12

32
shiva

Vous allez vouloir fermer le fichier temporaire après y avoir écrit. Ajoutez simplement un t.close jusqu'à la fin. Je parie que le fichier a une sortie tampon.

41
squiguy

Essayez cette course t.rewind avant lecture

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"
19
Debadatt

close ou rewind écrira le contenu du fichier. Et vous voudrez peut-être le supprimer après avoir utilisé:

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
7
Lev Lukomsky

Il convient de mentionner, d'appeler .rewind est indispensable, ou tout _ .read l'appel renverra simplement une valeur vide

6
Artur Beljajev