cadenas - abrir archivos ruby
Leer archivo binario como cadena en Ruby (8)
¿Qué tal una cierta seguridad abierta / cercana?
string = File.open(''file.txt'', ''rb'') { |file| file.read }
Necesito una forma fácil de tomar un archivo tar y convertirlo en una cadena (y viceversa). ¿Hay una 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 eso sería suficiente para convertirlo en una cadena, pero luego, cuando intento escribirlo de nuevo así ...
newFile = File.open("test.tar.gz", "w")
newFile.write(contents)
No es el mismo archivo. Al hacer ls -l
muestra que los archivos son de diferentes tamaños, aunque están bastante cerca (y al abrir el archivo se muestra la mayoría del contenido intacto). ¿Hay un pequeño error que estoy cometiendo o una forma completamente diferente (pero viable) de lograr esto?
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.
contents = File.open(''path-to-file.tar.gz'', ''rb'') { |f| f.read }
Primero, debes abrir el archivo como un archivo binario. Luego puedes leer el archivo completo en un comando.
file = File.open("path-to-file.tar.gz", "rb")
contents = file.read
Eso te dará todo el archivo en una cadena.
Después de eso, es probable que desee file.close
. Si no lo hace, el file
no se cerrará hasta que se recoja la basura, por lo que sería un ligero desperdicio de recursos del sistema mientras esté abierto.
Probablemente puedas codificar el archivo tar en Base64. Base 64 le proporcionará una representación ASCII pura del archivo que puede almacenar en un archivo de texto sin formato. Luego, puede recuperar el archivo tar descodificando el texto de nuevo.
Usted hace algo como:
require ''base64''
file_contents = Base64.encode64(tar_file_data)
Echa un vistazo a Rubydocs Base64 para tener una mejor idea.
Ruby tiene lectura binaria
data = IO.binread(path/filaname)
o si es menor que Ruby 1.9.2
data = IO.read(path/file)
Si necesitas el modo binario, deberás hacerlo de la manera más difícil:
s = File.open(filename, ''rb'') { |f| f.read }
Si no, más corto y dulce es:
s = IO.read(filename)
Si puede codificar el archivo tar mediante Base64 (y almacenarlo en un archivo de texto simple) puede usar
File.open("my_tar.txt").each {|line| puts line}
o
File.new("name_file.txt", "r").each {|line| puts line}
para imprimir cada línea (texto) en el cmd.
en os x estos son los mismos para mí ... ¿podría ser extra "/ r" en Windows?
En cualquier caso puede ser mejor con:
contents = File.read("e.tgz")
newFile = File.open("ee.tgz", "w")
newFile.write(contents)