Erstellen einer leeren Datei in Ruby: "Touch" -Äquivalent?


Antworten:


180

FileUtils.touchsieht aus wie es tut und spiegelt * den touchBefehl:

require 'fileutils'
FileUtils.touch('file.txt')

* Im Gegensatz zu touch (1) können Sie mtime oder atime nicht alleine aktualisieren. Es fehlen auch ein paar andere nette Optionen.


@ 5chdn Du meinst ohne die Parens? Ja, Parens um Methodenparameter sind (manchmal) optional.
Dave Newton

44

Wenn Sie sich Sorgen um Dateihandles machen:

File.open("foo.txt", "w") {}

Aus den Dokumenten :

Wenn der optionale Codeblock angegeben ist, wird ihm die geöffnete Datei als Argument übergeben, und das File-Objekt wird automatisch geschlossen, wenn der Block beendet wird.


Vielen Dank, ich sende die neue Datei an einen anderen Prozess, daher muss das Handle sofort geschlossen werden.
Abhi Beckert

12
Es ist erwähnenswert, dass dies nicht wirklich spiegelt touch- es wird die Datei überschreiben, wenn es existiert.
MrTheWalrus

3
Verwenden Sie den Append-Modus und die Datei wird nicht abgeschnitten, wenn sie bereits vorhanden ist. File.open ("foo.txt", "a") {} Dies spiegelt auch nicht 'touch' wider, aber 'touch (1)' war es nicht die Frage.
G. Allen Morris III

Die Verwendung von "a" aktualisiert die mtime nicht. ("touch" war der Untertitel, also bringt Google uns Leute, die einen Ruby-Touch wollen.)
Martin Dorey

Wer ist auf * nix-Systemen der Dateibesitzer, wenn er auf diese Weise erstellt wird?
Islam Azab



-1

Nur ein Beispiel:

File.open "foo.txt", "w"

1
Lässt dies ein offenes Dateihandle zurück, wie es in einigen anderen Sprachen der Fall wäre?
Abhi Beckert

4
@Abhi: Das tut es, aber die Garbage Collection wird es irgendwann schaffen. Um dies zu vermeiden, passieren Sie einen leeren Block (siehe Michael Kohls Antwort)
Marc-André Lafortune

Wann wird "irgendwann" passieren? Am Ende des Skripts oder sofort, weil es keiner Variablen zugewiesen wurde? Ich erstelle die Datei, damit andere Prozesse auf dem System sofort damit arbeiten können. Sie werden blockiert, wenn das Dateihandle noch zum Schreiben geöffnet ist.
Abhi Beckert

1
File.open ("foo.txt", "w"). Close () löst das Problem mit dem Dateihandle, aber FileUtils.touch ist eine bessere Lösung.
Michael Campbell

Lassen Sie keine offenen
Dateihandles
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.