Réponses:
La classe Ruby File vous donnera les tenants et aboutissants de ::new
et ::open
mais son parent, la classe IO , pénètre dans la profondeur de #read
et #write
.
Recherchez-vous ce qui suit?
File.open(yourfile, 'w') { |file| file.write("your text") }
yourfile
est une variable qui contient le nom du fichier à écrire.
f.write
dé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, w
c'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.write
option é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_sysopen
message 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' }