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.