Leer el contenido de un archivo local en una variable en Rails


86

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

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

solo me da una parte. En PHP, acabo de usar file_get_contents.


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

Respuestas:


163
data = File.read("/path/to/file")

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

4
¿No deja el archivo abierto?
Tom Rossi

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

Esto es útil para leer sin el uso de un bloque, lo que permite que el contenido se analice fácilmente y se establezca en variables disponibles para otros bloques sin la necesidad de crear una clase.
Andrew

3
Para abordar la pregunta de @ TomRossi, no, esto no deja el archivo abierto. Llamar a read en la clase File abre, lee y cierra el archivo. Sin embargo, llamar a read en una instancia de archivo (que tenía que abrirse primero) no lo cierra. El método que se llama aquí es ruby-doc.org/core-2.5.0/IO.html#method-c-read en lugar de ruby-doc.org/core-2.5.0/IO.html#method-i- leer
AndrewKS


16

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


10
A menos que estés realmente concatenación de un montón de archivos en conjunto, me acaba de escribir que a medida:data = File.open("file", "rb") {|io| io.read}
Glenn Jackman

Señor, merece una medalla. Perdí horas tratando de averiguar por qué mis archivos adjuntos en PDF no se podían leer cuando se enviaban desde un servidor de Windows hasta que encontré esta respuesta.
Augusto Samamé Barrientos
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.