2010-06-16 6 views
44

Todo lo que quiero hacer es obtener todo el contenido de un archivo local y almacenarlo en una variable. ¿Cómo?Leer el contenido de un archivo local en una variable en Rails

File.read(@icon.full_filename).each {|l| r += l}

sólo me da una parte de ella. En PHP, acabo de usar file_get_contents.

Gracias!

+0

Siento que este es un problema de Windows de forma única, porque esta solución, y la propuesta por zed_0xff funcionan perfectamente en Mac/Linux. Sé que irb se convierte \ r \ n en \ n al hacer File.read ... ¿quizás eso es relevante aquí? –

Respuesta

10

responder a mi propia pregunta aquí ... Resulta que es una única peculiaridad de Windows que sucede al leer archivos binarios (en mi caso un archivo JPEG) que requiere una bandera adicional en la llamada de función abierta o File.open. Lo revisé al open("/path/to/file", 'rb') {|io| a = a + io.read} y todo estaba bien.

+8

A menos que esté concatenando un grupo de archivos, simplemente escribiría eso como: 'data = File.open (" file "," rb ") {| io | io.read} ' –

90
data = File.read("/path/to/file") 
+1

Lo pensé, pero eso me da una cadena de longitud 52. El tamaño real del archivo cuando voy File.size ("/ ruta/a/archivo") es 1676. –

+4

¿Eso no deja el archivo abierto? –

+0

¡Me gusta este! Sería bueno saber cómo mantener los encabezados del tipo de contenido de archivo –

9

Creo que se debe considerar el uso IO.binread("/path/to/file") si usted tiene una reciente intérprete de Ruby (es decir,> = 1.9.2)

Se puede encontrar documentación de la clase aquí IOhttp://www.ruby-doc.org/core-2.1.2/IO.html

+1

Esto es más corto y cierra el archivo por usted. – Rob

Cuestiones relacionadas