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
24
En Ruby 1.9.3+, puede usar File.write(también conocido como IO.write):
¿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 :-)
`touch file.txt`
Respuestas:
FileUtils.touch
se parece a lo que hace y refleja * eltouch
comando:* A diferencia de touch (1), no puede actualizar mtime o atime solo. También le faltan algunas otras buenas opciones.
fuente
Si le preocupan los identificadores de archivos:
De los documentos :
fuente
touch
: sobrescribirá el archivo si existe.En Ruby 1.9.3+, puede usar
File.write
(también conocido comoIO.write
):Para una versión anterior,
require "backports/1.9.3/file/write"
use oFile.open("foo.txt", "w") {}
fuente
Y también, menos ventajoso, pero muy breve:
fuente
Solo un ejemplo:
fuente