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?
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
Essayer
File.open("out.txt", "w") do |f|
f.write(data_you_want_to_write)
end
sans utiliser le
File.new "out.txt"
Essayez d’utiliser w+
comme mode d’écriture au lieu de simplement w
:
File.open("out.txt", "w+") { |file| file.write("boo!") }
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.
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.
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.
Si l'objectif est simplement de créer un fichier, le moyen le plus direct que je vois est:
FileUtils.touch "foobar.txt"
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