Creación de un archivo vacío en Ruby: ¿equivalente "táctil"?


119

¿Cuál es la mejor manera de crear un archivo vacío en Ruby?

Algo similar al comando de Unix, toque :

touch file.txt

5
Siempre puedes hacerlo`touch file.txt`
Mark Thomas

8
@Mark: ¿incluso en ventanas?
Marc-André Lafortune

1
¿Personas que se preocupan por la programación adecuada independiente de la plataforma? :-)
TJ Biddle

Respuestas:


181

FileUtils.touchse parece a lo que hace y refleja * el touchcomando:

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

* A diferencia de touch (1), no puede actualizar mtime o atime solo. También le faltan algunas otras buenas opciones.


@ 5chdn ¿Quieres decir sin los parens? Sí, los parámetros relacionados con los parámetros del método son (a veces) opcionales.
Dave Newton

44

Si le preocupan los identificadores de archivos:

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

De los documentos :

Si se proporciona el bloque de código opcional, se pasará el archivo abierto como argumento y el objeto Archivo se cerrará automáticamente cuando finalice el bloque.


Gracias, estoy enviando el nuevo archivo a otro proceso, por lo que el identificador debe cerrarse inmediatamente.
Abhi Beckert

12
Vale la pena señalar que esto en realidad no refleja touch: sobrescribirá el archivo si existe.
MrTheWalrus

3
Utilice el modo anexar y el archivo no se truncará si ya existe File.open ("foo.txt", "a") {} Esto tampoco refleja 'touch', pero luego 'touch (1)' no se la pregunta.
G. Allen Morris III

El uso de "a" no actualiza mtime. ("toque" era el subtítulo, por lo que Google nos trae personas que quieren un toque Ruby).
Martin Dorey

en los sistemas * nix, ¿quién es el propietario del archivo cuando se crea de esta manera?
Islam Azab



-1

Solo un ejemplo:

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

1
¿Esto deja un identificador de archivo abierto atrás, como lo haría en otros idiomas?
Abhi Beckert

4
@Abhi: Lo hace, pero la recolección de basura lo manejará en algún momento. Sin embargo, para evitar eso, pase un bloque vacío (ver la respuesta de Michael Kohl)
Marc-André Lafortune

¿Cuándo sucederá "en algún momento"? ¿Al final del script o inmediatamente porque no se le ha asignado ninguna variable? Estoy creando el archivo para que otros procesos del sistema puedan comenzar a trabajar con él de inmediato y se bloquearán si el identificador del archivo aún está abierto para escritura.
Abhi Beckert

1
File.open ("foo.txt", "w"). Close () resuelve el problema de manejo de archivos, pero FileUtils.touch es una mejor solución.
Michael Campbell

No deje identificadores de archivos abiertos como ese :-)
sekmo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.