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.