Antworten:
Die Ruby File-Klasse gibt Ihnen die Vor- und Nachteile von ::new
und ::open
doch übergibt die übergeordnete Klasse , die IO-Klasse , die Tiefe von #read
und #write
.
Suchen Sie Folgendes?
File.open(yourfile, 'w') { |file| file.write("your text") }
yourfile
ist eine Variable, die den Namen der zu schreibenden Datei enthält.
f.write
eine 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.open
wird 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 w
ist 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.write
Option den Dateiinhalt überschreibt, anstatt ihn anzuhängen. Mit IO.write anhängen ist etwas langweilig.
Errno::ENOENT: No such file or directory @ rb_sysopen
Nachricht 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' }