2011-09-18 7 views
9

Soy un novato para Ruby, estoy trabajando en algunos katas y me quedé con este tonto problema. Necesito copiar el contenido de 1 archivo a un archivo nuevo en 1 línea de códigoRuby leer/escribir en el archivo en 1 línea de código

primer intento:

File.open(out, 'w').write(File.open(in).read) 

Niza, pero es malo que necesito para cerrar los archivos:

File.open(out, 'w') { |outf| outf.write(File.open(in).read) } 

y cierre por supuesto, la lectura:

File.open(out, 'w') { |outf| File.open(in) { |inf| outf.write(outf.read)) } } 

Esto es lo que se me ocurra, pero no se parece a 1 línea de código para yo :(

Ideas?

Saludos,

+2

¿El FileUtils, File.Copy? – Calin

+0

No veo ningún salto de línea o punto y coma ..... –

+0

@matt Lo sé, pero si tengo que estar en lo cierto para mí tendré que poner algunos saltos de línea allí – Calin

Respuesta

14

Hay muchas maneras. Usted podría simplemente invocar la línea de comandos, por ejemplo:

`cp path1 path2` 

Pero supongo que está buscando algo como:

File.open('foo.txt', 'w') { |f| f.write(File.read('bar.txt')) } 
+0

sí, esta era mi segunda opción, pero ¿cómo? sobre File.read ('bar.txt'), ¿no necesita cerrar? – Calin

+0

Se hace automáticamente para usted. –

+0

te refieres a esto http://stackoverflow.com/questions/4795447/rubys-file-open-and-the-need-for-f-close – Calin

2

Usted puede hacer lo siguiente:

File.open(out_file, "w") {|f| f.write IO.read(in_file)} 
1

Usted puede tratar de:

IO.binwrite('to-filename', IO.binread('from-filename')) 

Verificar los documentos de rubí: recuento

IO::binwrite & IO::binread