Creare un file vuoto in Ruby: equivalente "touch"?


119

Qual è il modo migliore per creare un file vuoto in Ruby?

Qualcosa di simile al comando Unix, tocca :

touch file.txt

5
Puoi sempre farlo`touch file.txt`
Mark Thomas

8
@Mark: anche su Windows?
Marc-André Lafortune

1
Persone a cui importa una corretta programmazione indipendente dalla piattaforma? :-)
TJ Biddle

Risposte:


181

FileUtils.touchassomiglia a quello che fa e rispecchia * il touchcomando:

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

* A differenza del tocco (1) non puoi aggiornare mtime o atime da solo. Mancano anche alcune altre belle opzioni.


@ 5chdn Vuoi dire senza i genitori? Sì, le parentesi attorno ai parametri del metodo sono (a volte) facoltative.
Dave Newton,

44

Se sei preoccupato per gli handle di file:

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

Dai documenti :

Se viene fornito il blocco di codice opzionale, verrà passato il file aperto come argomento e l'oggetto File verrà automaticamente chiuso quando il blocco termina.


Grazie, sto inviando il nuovo file a un altro processo, quindi l'handle deve essere chiuso immediatamente.
Abhi Beckert

12
Vale la pena sottolineare che questo in realtà non rispecchia touch: sovrascriverà il file se esiste.
MrTheWalrus

3
Usa la modalità di aggiunta e il file non verrà troncato se esiste già File.open ("foo.txt", "a") {} Anche questo non rispecchia 'touch', ma poi 'touch (1)' non lo era la domanda.
G. Allen Morris III

L'uso di "a" non aggiorna il mtime. ("tocco" era il sottotitolo, quindi Google ci offre persone che desiderano un tocco Ruby.)
Martin Dorey

sui sistemi * nix, chi è il proprietario del file quando viene creato in questo modo?
Islam Azab,



-1

Solo un esempio:

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

1
Questo lascia un handle di file aperto, come sarebbe in alcune altre lingue?
Abhi Beckert

4
@ Abhi: Sì, ma la garbage collection lo gestirà ad un certo punto. Per evitarlo, però, passa un blocco vuoto (vedi la risposta di Michael Kohl)
Marc-André Lafortune

Quando succederà "a un certo punto"? Alla fine dello script o subito perché non è stata assegnata a nessuna variabile? Sto creando il file in modo che altri processi sul sistema possano iniziare a lavorarci immediatamente e verranno bloccati se l'handle del file è ancora aperto per la scrittura.
Abhi Beckert

1
File.open ("foo.txt", "w"). Close () risolve il problema del filehandle, ma FileUtils.touch è una soluzione migliore.
Michael Campbell

Non lasciare gli handle di file aperti in questo modo :-)
sekmo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.