cadenas - Cómo crear un archivo en Ruby
cadenas ruby (7)
OK, ahora me siento estúpido. Los dos primeros definitivamente no funcionan, pero los otros dos sí. No estoy seguro de cómo me convencí de que los había probado. Perdón por perder el tiempo de todos.
En caso de que esto ayude a alguien más, esto puede ocurrir cuando intenta hacer un nuevo archivo en un directorio que no existe.
Intento crear un nuevo archivo y las cosas no parecen funcionar como yo también las espero. Esto es lo que he intentado:
File.new "out.txt"
File.open "out.txt"
File.new "out.txt","w"
File.open "out.txt","w"
De acuerdo con todo lo que he leído en línea, todos estos deberían funcionar, pero cada uno de ellos me da esto:
ERRNO::ENOENT: No such file or directory - out.txt
Esto ocurre desde el IRB y desde un archivo ruby. ¿Qué me estoy perdiendo?
El directorio no existe. Asegúrese de que exista como open
, no creará esos directorios para usted.
Me encontré con esto hace un tiempo.
Intenta usar w+
como modo de escritura en lugar de solo w
:
File.open("out.txt", "w+") { |file| file.write("boo!") }
También puede usar constantes en lugar de cadenas para especificar el modo que desea. El beneficio es si crea un error tipográfico en un nombre constante, su programa generará una excepción de tiempo de ejecución.
Las constantes son File::RDONLY
o File::WRONLY
o File::CREAT
. También puedes combinarlos si quieres.
Descripción completa de modos abiertos de archivos en ruby-doc.org
Tratar
File.open("out.txt", "w") do |f|
f.write(data_you_want_to_write)
end
sin usar el
File.new "out.txt"
Utilizar:
File.open("out.txt", [your-option-string]) {|f| f.write("write your stuff here") }
donde están tus opciones:
-
r
- Solo lectura. El archivo debe existir. -
w
- Crea un archivo vacío para escribir. -
a
- Agregar a un archivo. El archivo se crea si no existe. -
r+
- Abre un archivo para actualizar tanto la lectura como la escritura. El archivo debe existir. -
w+
- Crea un archivo vacío para leer y escribir. -
a+
- Abre un archivo para leer y anexar. El archivo se crea si no existe.
En tu caso, ''w''
es preferible.
O podrías tener:
out_file = File.new("out.txt", "w")
#...
out_file.puts("write your stuff here")
#...
out_file.close
File.new
y File.open
predeterminan el modo de lectura ( ''r''
) como un mecanismo de seguridad, para evitar posiblemente sobreescribir 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 va a enviar es una cadena, en lugar de escribir:
File.open(''foo.txt'', ''w'') { |fo| fo.puts "bar" }
o peor:
fo = File.open(''foo.txt'', ''w'')
fo.puts "bar"
fo.close
Use la write
más sucinta
File.write(''foo.txt'', ''bar'')
write
tiene modos permitidos para que podamos usar ''w''
, ''a''
, ''r+''
si es necesario.
open
con un bloque es útil si tiene que calcular el resultado en un bucle iterativo y desea dejar el archivo abierto mientras lo hace. write
es útil si va a generar el contenido de una vez y luego cierra el archivo.
Consulte la documentación para más información.