Réponses:
La classe Ruby File vous donnera les tenants et aboutissants de ::newet ::openmais son parent, la classe IO , pénètre dans la profondeur de #readet #write.
Recherchez-vous ce qui suit?
File.open(yourfile, 'w') { |file| file.write("your text") }
yourfileest une variable qui contient le nom du fichier à écrire.
f.writedéclenche une exception.
File.write('filename', 'content')
IO.write('filename', 'content')
Vous pouvez utiliser la version courte:
File.write('/path/to/file', 'Some glorious content')
Il renvoie la longueur écrite; voir :: écrire pour plus de détails et d'options.
Pour ajouter au fichier, s'il existe déjà, utilisez:
File.write('/path/to/file', 'Some glorious content', mode: 'a')
C'est l'approche préférée dans la plupart des cas:
File.open(yourfile, 'w') { |file| file.write("your text") }
Lorsqu'un bloc est passé à File.open , l'objet File sera automatiquement fermé à la fin du bloc.
Si vous ne passez pas un bloc à File.open, vous devez vous assurer que le fichier est correctement fermé et que le contenu a été écrit dans le fichier.
begin
file = File.open("/tmp/some_file", "w")
file.write("your text")
rescue IOError => e
#some error occur, dir not writable etc.
ensure
file.close unless file.nil?
end
Vous pouvez le trouver dans la documentation :
static VALUE rb_io_s_open(int argc, VALUE *argv, VALUE klass)
{
VALUE io = rb_class_new_instance(argc, argv, klass);
if (rb_block_given_p()) {
return rb_ensure(rb_yield, io, io_close, io);
}
return io;
}
File.open blog.rubybestpractices.com/posts/rklemme/… cela est également mentionné dans la documentation officielle
La réponse de Zambri trouvée ici est la meilleure.
File.open("out.txt", '<OPTION>') {|f| f.write("write your stuff here") }
où vos options <OPTION>sont:
r- Lecture seulement. Le fichier doit exister.
w - Créez un fichier vide pour l'écriture.
a - Ajouter à un fichier. Le fichier est créé s'il n'existe pas.
r+- Ouvrez un fichier pour mettre à jour la lecture et l'écriture. Le fichier doit exister.
w+ - Créez un fichier vide pour la lecture et l'écriture.
a+- Ouvrez un fichier pour le lire et l'ajouter. Le fichier est créé s'il n'existe pas.
Dans votre cas, wc'est préférable.
Pour ceux d'entre nous qui apprennent par l'exemple ...
Écrivez du texte dans un fichier comme celui-ci:
IO.write('/tmp/msg.txt', 'hi')
INFO BONUS ...
Relisez-le comme ceci
IO.read('/tmp/msg.txt')
Souvent, je veux lire un fichier dans mon presse-papiers ***
Clipboard.copy IO.read('/tmp/msg.txt')
Et d'autres fois, je veux écrire ce qui est dans mon presse-papiers dans un fichier ***
IO.write('/tmp/msg.txt', Clipboard.paste)
*** Suppose que le bijou du presse-papiers est installé
IO.writeoption écrase le contenu du fichier au lieu de l'ajouter. Ajouter avec IO.write est un peu fastidieux.
Errno::ENOENT: No such file or directory @ rb_sysopenmessage et le fichier créé avec une taille de 0 octet.
Pour détruire le contenu précédent du fichier, puis écrivez une nouvelle chaîne dans le fichier:
open('myfile.txt', 'w') { |f| f << "some text or data structures..." }
Pour ajouter à un fichier sans écraser son ancien contenu:
open('myfile.txt', "a") { |f| f << 'I am appended string' }