web-dev-qa-db-fra.com

Comment créer un fichier dans Ruby

J'essaie de créer un nouveau fichier et les choses ne semblent pas fonctionner comme prévu. Voici ce que j'ai essayé:

File.new "out.txt"
File.open "out.txt"
File.new "out.txt","w"
File.open "out.txt","w"

D'après tout ce que j'ai lu en ligne, tout cela devrait fonctionner, mais chacun d'entre eux me donne ceci:

ERRNO::ENOENT: No such file or directory - out.txt

Cela se produit à partir de l'IRB et d'un fichier Ruby. Qu'est-ce que je rate?

159
Civatrix

Utilisation:

File.open("out.txt", [your-option-string]) {|f| f.write("write your stuff here") }

où sont vos options:

  • r - Lecture seule. Le fichier doit exister.
  • w - Crée un fichier vide pour l'écriture.
  • a - Ajouter à un fichier. Le fichier est créé s'il n'existe pas.
  • r+ - Ouvre un fichier pour mettre à jour en lecture et en écriture. Le fichier doit exister.
  • w+ - Créez un fichier vide pour la lecture et l'écriture.
  • a+ - Ouvre un fichier à lire et à ajouter. Le fichier est créé s'il n'existe pas.

Dans votre cas, 'w' est préférable.

OU vous pourriez avoir:

out_file = File.new("out.txt", "w")
#...
out_file.puts("write your stuff here")
#...
out_file.close
403
zanbri

Essayer

File.open("out.txt", "w") do |f|     
  f.write(data_you_want_to_write)   
end

sans utiliser le

File.new "out.txt"
34
GMD

Essayez d’utiliser w+ comme mode d’écriture au lieu de simplement w:

File.open("out.txt", "w+") { |file| file.write("boo!") }
24
Chris Bunch

OK, maintenant je me sens stupide. Les deux premiers ne fonctionnent vraiment pas, mais les deux derniers le sont. Je ne sais pas comment je me suis convaincu que je les avais essayés. Désolé de perdre le temps de tout le monde.

Si cela peut aider quelqu'un d'autre, cela peut se produire lorsque vous essayez de créer un nouveau fichier dans un répertoire qui n'existe pas.

20
tom

Le répertoire n'existe pas. Assurez-vous qu'il existe car open ne créera pas ces répertoires pour vous.

Je suis tombé dessus moi-même il y a quelque temps.

10
nterry

File.new et File.open passent en mode lecture ('r') en tant que mécanisme de sécurité, afin d'éviter éventuellement d'écraser un fichier. Nous devons explicitement dire à Ruby d'utiliser le mode d'écriture ('w' est le moyen le plus courant) si nous allons exporter dans le fichier.

Si le texte à afficher est une chaîne, plutôt que d'écrire:

File.open('foo.txt', 'w') { |fo| fo.puts "bar" }

ou pire:

fo = File.open('foo.txt', 'w')
fo.puts "bar"
fo.close

Utilisez le plus succinct write:

File.write('foo.txt', 'bar')

write a des modes autorisés afin que nous puissions utiliser 'w', 'a', 'r+' si nécessaire.

open avec un bloc est utile si vous devez calculer la sortie dans une boucle itérative et que vous voulez laisser le fichier ouvert. write est utile si vous souhaitez afficher le contenu en une opération puis fermez le fichier.

Voir la documentation pour plus d'informations.

8
the Tin Man

Si l'objectif est simplement de créer un fichier, le moyen le plus direct que je vois est:

 FileUtils.touch "foobar.txt"
3
Nicola Mingotti

Vous pouvez également utiliser des constantes au lieu de chaînes pour spécifier le mode souhaité. L'avantage est que si vous faites une faute de frappe dans un nom constant, votre programme lève une exception d'exécution.

Les constantes sont File::RDONLY ou File::WRONLY ou File::CREAT. Vous pouvez également les combiner si vous le souhaitez.

Description complète des modes d'ouverture de fichier sur Ruby-doc.org

0
Alex Tamoykin