J'essaie de créer un nouveau fichier et les choses ne semblent pas fonctionner comme je m'y attendais. Voici ce que j'ai essayé:
File.new "out.txt"
File.open "out.txt"
File.new "out.txt","w"
File.open "out.txt","w"
Selon 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 d'IRB ainsi que d'un script Ruby. Qu'est-ce que je rate?
Errno::EACCES
, nonENOENT
.Réponses:
Utilisation:
où sont vos options:
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 la mise à jour en lecture et en écriture. Le fichier doit exister.w+
- Créez un fichier vide pour la lecture et l'écriture.a+
- Ouvrez un fichier à lire et à ajouter. Le fichier est créé s'il n'existe pas.Dans votre cas,
'w'
c'est préférable.OU vous pourriez avoir:
la source
outFile
devrait ressembler àout_file
.Essayer
sans utiliser le
la source
Essayez d'utiliser
"w+"
comme mode d'écriture au lieu de simplement"w"
:la source
w
) ou à la fois en lecture et en écriture (w+
).Si cela aide 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.
la source
Le répertoire n'existe pas. Assurez-vous qu'il existe
open
et ne créera pas ces répertoires pour vous.J'ai rencontré cela moi-même il y a quelque temps.
la source
File.new
etFile.open
par défaut en mode lecture ('r'
) comme mécanisme de sécurité, pour éviter d'écraser un fichier. Nous devons explicitement dire à Ruby d'utiliser le mode d'écriture ('w'
c'est le moyen le plus courant) si nous allons sortir dans le fichier.Si le texte à afficher est une chaîne, plutôt que d'écrire:
ou pire:
Utilisez le plus succinct
write
:write
a permis modes afin que nous puissions utiliser'w'
,'a'
,'r+'
le cas échéant.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 comme vous le faites.write
est utile si vous allez sortir le contenu en une seule fois, puis fermer le fichier.Consultez la documentation pour plus d'informations.
la source
Si l'objectif est simplement de créer un fichier, la manière la plus directe que je vois est:
la source
Vous pouvez utiliser
File.write('name of file here', data)
la source
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èvera une exception d'exécution.
Les constantes sont
File::RDONLY
ouFile::WRONLY
ouFile::CREAT
. Vous pouvez également les combiner si vous le souhaitez.Description complète des modes d'ouverture de fichier sur ruby-doc.org
la source