Ich versuche eine neue Datei zu erstellen und die Dinge scheinen nicht so zu funktionieren, wie ich es auch erwarte. Folgendes habe ich versucht:
File.new "out.txt"
File.open "out.txt"
File.new "out.txt","w"
File.open "out.txt","w"
Nach allem, was ich online gelesen habe, sollten alle funktionieren, aber jeder einzelne von ihnen gibt mir Folgendes:
ERRNO::ENOENT: No such file or directory - out.txt
Dies geschieht sowohl über IRB als auch über ein Ruby-Skript. Was vermisse ich?
Errno::EACCES
, nichtENOENT
.Antworten:
Verwenden:
Wo sind Ihre Optionen:
r
- Schreibgeschützt. Die Datei muss vorhanden sein.w
- Erstellen Sie eine leere Datei zum Schreiben.a
- An eine Datei anhängen. Die Datei wird erstellt, wenn sie nicht vorhanden ist.r+
- Öffnen Sie eine Datei, um das Lesen und Schreiben zu aktualisieren. Die Datei muss vorhanden sein.w+
- Erstellen Sie eine leere Datei zum Lesen und Schreiben.a+
- Öffnen Sie eine Datei zum Lesen und Anhängen. Die Datei wird erstellt, wenn sie nicht vorhanden ist.In Ihrem Fall
'w'
ist vorzuziehen.ODER Sie könnten haben:
quelle
outFile
sollte aussehen wieout_file
.Versuchen
ohne die
quelle
Versuchen Sie,
"w+"
als Schreibmodus zu verwenden, anstatt nur"w"
:quelle
w
) oder sowohl lesen als auch schreiben (w+
).Falls dies jemand anderem hilft, kann dies auftreten, wenn Sie versuchen, eine neue Datei in einem nicht vorhandenen Verzeichnis zu erstellen.
quelle
Das Verzeichnis existiert nicht.
open
Stellen Sie sicher, dass es existiert, da diese Verzeichnisse nicht für Sie erstellt werden.Ich bin vor einiger Zeit selbst darauf gestoßen.
quelle
File.new
undFile.open
standardmäßig read (('r'
) als Sicherheitsmechanismus, um ein mögliches Überschreiben einer Datei zu vermeiden. Wir müssen Ruby ausdrücklich anweisen, den Schreibmodus zu verwenden ('w'
ist der häufigste Weg), wenn wir in die Datei ausgeben wollen.Wenn der auszugebende Text eine Zeichenfolge ist, anstatt zu schreiben:
oder schlimmer:
Verwenden Sie die prägnanter
write
:write
wir können erlaubten Modi so verwenden'w'
,'a'
,'r+'
falls erforderlich.open
mit einem Block ist nützlich, wenn Sie die Ausgabe in einer iterativen Schleife berechnen müssen und die Datei dabei offen lassen möchten.write
ist nützlich, wenn Sie den Inhalt auf einmal ausgeben und dann die Datei schließen möchten.Weitere Informationen finden Sie in der Dokumentation .
quelle
Wenn das Ziel nur darin besteht, eine Datei zu erstellen, sehe ich am direktesten:
quelle
Sie können verwenden
File.write('name of file here', data)
quelle
Sie können auch Konstanten anstelle von Zeichenfolgen verwenden, um den gewünschten Modus anzugeben. Der Vorteil ist, dass Ihr Programm eine Laufzeitausnahme auslöst, wenn Sie einen Tippfehler in einem konstanten Namen machen.
Die Konstanten sind
File::RDONLY
oderFile::WRONLY
oderFile::CREAT
. Sie können sie auch kombinieren, wenn Sie möchten.Vollständige Beschreibung der Modi zum Öffnen von Dateien auf ruby-doc.org
quelle