Estoy tratando de crear un nuevo archivo y las cosas no parecen funcionar como lo espero también. Esto es lo que he intentado:
File.new "out.txt"
File.open "out.txt"
File.new "out.txt","w"
File.open "out.txt","w"
Según todo lo que he leído en línea, todos deberían funcionar, pero cada uno de ellos me da esto:
ERRNO::ENOENT: No such file or directory - out.txt
Esto sucede tanto de IRB como de un script Ruby. ¿Qué me estoy perdiendo?
Errno::EACCES
, noENOENT
.Respuestas:
Utilizar:
donde están tus opciones:
r
- Solo lectura. El archivo debe existir.w
- Crear un archivo vacío para escribir.a
- Agregar a un archivo. El archivo se crea si no existe.r+
- Abra un archivo para actualizar tanto la lectura como la escritura. El archivo debe existir.w+
- Cree un archivo vacío para leer y escribir.a+
- Abra un archivo para leer y agregar. El archivo se crea si no existe.En su caso,
'w'
es preferible.O podrías tener:
fuente
outFile
debería verse asíout_file
.Tratar
sin usar el
fuente
Intente usarlo
"w+"
como modo de escritura en lugar de solo"w"
:fuente
w
) o tanto leer como escribir (w+
).En caso de que esto ayude a alguien más, esto puede ocurrir cuando intenta crear un nuevo archivo en un directorio que no existe.
fuente
El directorio no existe. Asegúrese de que exista, ya
open
que no creará esos directorios por usted.Me encontré con esto hace un tiempo.
fuente
File.new
yFile.open
predeterminado para leer el modo ('r'
) como mecanismo de seguridad, para evitar posiblemente sobrescribir un archivo. Tenemos que decirle explícitamente a Ruby que use el modo de escritura ('w'
es la forma más común) si vamos a generar el archivo.Si el texto que se generará es una cadena, en lugar de escribir:
o peor:
Usa el más sucinto
write
:write
ha permitido modos así que podemos usar'w'
,'a'
,'r+'
si es necesario.open
con un bloque es útil si tiene que calcular la salida en un ciclo iterativo y desea dejar el archivo abierto mientras lo hace.write
es útil si va a generar el contenido de una sola vez y luego cierre el archivo.Consulte la documentación para más información.
fuente
Si el objetivo es solo crear un archivo, la forma más directa que veo es:
fuente
Puedes usar
File.write('name of file here', data)
fuente
También puede usar constantes en lugar de cadenas para especificar el modo que desea. El beneficio es que si cometes un error tipográfico en un nombre constante, tu programa generará una excepción de tiempo de ejecución.
Las constantes son
File::RDONLY
oFile::WRONLY
oFile::CREAT
. También puedes combinarlos si quieres.Descripción completa de los modos de archivo abierto en ruby-doc.org
fuente