Antworten:
Die Ruby File-Klasse gibt Ihnen die Vor- und Nachteile von ::newund ::opendoch übergibt die übergeordnete Klasse , die IO-Klasse , die Tiefe von #readund #write.
Suchen Sie Folgendes?
File.open(yourfile, 'w') { |file| file.write("your text") }
yourfileist eine Variable, die den Namen der zu schreibenden Datei enthält.
f.writeeine Ausnahme ausgelöst wird .
File.write('filename', 'content')
IO.write('filename', 'content')
Sie können die Kurzversion verwenden:
File.write('/path/to/file', 'Some glorious content')
Es gibt die geschriebene Länge zurück; Weitere Details und Optionen finden Sie unter :: write .
Verwenden Sie zum Anhängen an die Datei, falls diese bereits vorhanden ist:
File.write('/path/to/file', 'Some glorious content', mode: 'a')
Dies ist in den meisten Fällen der bevorzugte Ansatz:
File.open(yourfile, 'w') { |file| file.write("your text") }
Wenn ein Block an übergeben wird, File.openwird das Dateiobjekt automatisch geschlossen, wenn der Block beendet wird.
Wenn Sie keinen Block an übergeben File.open, müssen Sie sicherstellen, dass die Datei korrekt geschlossen ist und der Inhalt in die Datei geschrieben wurde.
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
Sie finden es in der Dokumentation :
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/… es wird auch in der offiziellen Dokumentation erwähnt
Die Antwort von Zambri , die hier gefunden wird, ist die beste.
File.open("out.txt", '<OPTION>') {|f| f.write("write your stuff here") }
Wo sind Ihre Optionen für <OPTION>:
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 sowohl das Lesen als auch das 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 wist vorzuziehen.
Für diejenigen von uns, die mit gutem Beispiel lernen ...
Schreiben Sie Text in eine Datei wie diese:
IO.write('/tmp/msg.txt', 'hi')
BONUS INFO ...
Lies es so zurück
IO.read('/tmp/msg.txt')
Häufig möchte ich eine Datei in meine Zwischenablage einlesen ***
Clipboard.copy IO.read('/tmp/msg.txt')
Und manchmal möchte ich schreiben, was sich in meiner Zwischenablage befindet, in eine Datei ***
IO.write('/tmp/msg.txt', Clipboard.paste)
*** Angenommen, Sie haben das Zwischenablage-Juwel installiert
IO.writeOption den Dateiinhalt überschreibt, anstatt ihn anzuhängen. Mit IO.write anhängen ist etwas langweilig.
Errno::ENOENT: No such file or directory @ rb_sysopenNachricht angezeigt und die Datei mit einer Größe von 0 Byte erstellt.
Um den vorherigen Inhalt der Datei zu zerstören, schreiben Sie eine neue Zeichenfolge in die Datei:
open('myfile.txt', 'w') { |f| f << "some text or data structures..." }
So hängen Sie eine Datei an, ohne den alten Inhalt zu überschreiben:
open('myfile.txt', "a") { |f| f << 'I am appended string' }