Respuestas:
La clase Ruby File le dará los entresijos de ::new
y ::open
pero su padre, la clase IO , profundiza en #read
y #write
.
¿Estás buscando lo siguiente?
File.open(yourfile, 'w') { |file| file.write("your text") }
yourfile
es una variable que contiene el nombre del archivo a escribir.
f.write
genera una Excepción.
File.write('filename', 'content')
IO.write('filename', 'content')
Puedes usar la versión corta:
File.write('/path/to/file', 'Some glorious content')
Devuelve la longitud escrita; ver :: escribir para más detalles y opciones.
Para agregar al archivo, si ya existe, use:
File.write('/path/to/file', 'Some glorious content', mode: 'a')
Este es el enfoque preferido en la mayoría de los casos:
File.open(yourfile, 'w') { |file| file.write("your text") }
Cuando se pasa un bloque a File.open
, el objeto Archivo se cerrará automáticamente cuando el bloque termine.
Si no pasa un bloque a File.open
, debe asegurarse de que el archivo esté cerrado correctamente y que el contenido se haya escrito en el archivo.
begin
file = File.open("/tmp/some_file", "w")
file.write("your text")
rescue IOError => e
#some error occur, dir not writable etc.
ensure
file.close unless file.nil?
end
Lo puedes encontrar en la documentación :
static VALUE rb_io_s_open(int argc, VALUE *argv, VALUE klass)
{
VALUE io = rb_class_new_instance(argc, argv, klass);
if (rb_block_given_p()) {
return rb_ensure(rb_yield, io, io_close, io);
}
return io;
}
File.open
blog.rubybestpractices.com/posts/rklemme/ ... también se menciona en la documentación oficial
La respuesta de Zambri encontrada aquí es la mejor.
File.open("out.txt", '<OPTION>') {|f| f.write("write your stuff here") }
donde sus opciones <OPTION>
son:
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.
Para aquellos de nosotros que aprendemos con el ejemplo ...
Escribir texto en un archivo como este:
IO.write('/tmp/msg.txt', 'hi')
INFORMACIÓN ADICIONAL ...
Léelo de nuevo así
IO.read('/tmp/msg.txt')
Con frecuencia, quiero leer un archivo en mi portapapeles ***
Clipboard.copy IO.read('/tmp/msg.txt')
Y otras veces, quiero escribir lo que está en mi portapapeles en un archivo ***
IO.write('/tmp/msg.txt', Clipboard.paste)
*** Asume que tienes instalada la gema del portapapeles
IO.write
opción de sobrescribir el contenido del archivo en lugar de agregar. Anexar con IO.write es un poco tedioso.
Errno::ENOENT: No such file or directory @ rb_sysopen
mensaje y el archivo creado con un tamaño de 0 bytes.
Para destruir el contenido anterior del archivo, escriba una nueva cadena en el archivo:
open('myfile.txt', 'w') { |f| f << "some text or data structures..." }
Para adjuntar a un archivo sin sobrescribir su contenido anterior:
open('myfile.txt', "a") { |f| f << 'I am appended string' }