Necesito una manera fácil de tomar un archivo tar y convertirlo en una cadena (y viceversa). ¿Hay alguna manera de hacer esto en Ruby? Mi mejor intento fue este:
file = File.open("path-to-file.tar.gz")
contents = ""
file.each {|line|
contents << line
}
Pensé que sería suficiente para convertirlo en una cadena, pero cuando trato de escribirlo de nuevo de esta manera ...
newFile = File.open("test.tar.gz", "w")
newFile.write(contents)
No es el mismo archivo. Hacer ls -l
muestra que los archivos son de diferentes tamaños, aunque están bastante cerca (y abrir el archivo revela la mayor parte del contenido intacto). ¿Hay un pequeño error que estoy cometiendo o una forma completamente diferente (pero viable) de lograr esto?
IO.read
contrario sería la respuesta preferida.Respuestas:
Primero, debe abrir el archivo como un archivo binario. Luego puede leer el archivo completo en un solo comando.
Eso te dará todo el archivo en una cadena.
Después de eso, probablemente quieras hacerlo
file.close
. Si no lo hace,file
no se cerrará hasta que se recolecte basura, por lo que sería un pequeño desperdicio de recursos del sistema mientras está abierto.fuente
contents = (contents of file "path to file.txt" as string)
.begin {..open..} ensure {..close..} end
bloquescontents = File.binread('path-to-file.tar.gz')
Ver apidock .File
es una subclase deIO
.Si necesita el modo binario, deberá hacerlo de la manera difícil:
Si no, más corto y más dulce es:
fuente
s = File.open(filename, 'rb', &:read)
Para evitar dejar el archivo abierto, es mejor pasar un bloque a File.open. De esta manera, el archivo se cerrará después de que se ejecute el bloque.
fuente
en os x estos son los mismos para mí ... ¿podría esto ser "\ r" adicional en Windows?
en cualquier caso puede ser mejor con:
fuente
¿qué tal un poco de seguridad abierta / cerrada.
fuente
Ruby tiene lectura binaria
o si es menor que Ruby 1.9.2
fuente
Probablemente pueda codificar el archivo tar en Base64. Base 64 le dará una representación ASCII pura del archivo que puede almacenar en un archivo de texto sin formato. Luego puede recuperar el archivo tar decodificando el texto nuevamente.
Haces algo como:
Eche un vistazo a los Rubydocs Base64 para tener una mejor idea.
fuente
Si puede codificar el archivo tar con Base64 (y almacenarlo en un archivo de texto sin formato) puede usar
o
para imprimir cada línea (texto) en el cmd.
fuente