Tengo un archivo que está construido de la siguiente manera:
0x000 04 bytes: Número de direcciones en la tabla
0x004 04 bytes: Cuanto mide el contenido del archivo = $a
0x008 04 bytes: Cuanto mide el nombre del archivo = $b
0x00c $b bytes: Nombre del archivo
Despues de repetirse desde el 0x004 al 0x00c dependiendo de las direcciones que tenga la tabla, a continuación viene el contenido de cada archivo en el mismo orden en el que han aparecido.
Sabiendo esto, he creado el siguiente codigo:
nombrearchivo = "C:/Program Files/CCP/EVE/resLocalization.stuff"
arch = File.new(nombrearchivo, "rb")
arch_leer = File.new(nombrearchivo, "rb")
dirtotal = arch.sysread(4).unpack('V*').join.to_i
nombrearchivo = "hola/"
# Leo el archivo
cuenta0 = 4
valor5 = []
valor6 = []
for cuenta1 in 1..dirtotal do
valor1 = arch.sysread(4).unpack('V*').join.to_s
valor2 = arch.sysread(4).unpack('V*').join.to_i
cuenta0 = cuenta0 + 8
valor3 = cuenta0
for cuenta2 in 1..valor2 do
cuenta0 = cuenta0 + 1
valor4 = arch.read(1).bytes.first
if valor4 == 92
arch.seek(valor3, IO::SEEK_SET)
content = arch.read(cuenta2)
Dir::mkdir("#{nombrearchivo+content.chop}") unless File.directory?("#{nombrearchivo+content.chop}") == TRUE
end
end
arch_leer.seek(valor3, IO::SEEK_SET)
content = arch_leer.read(valor2)
cuenta0 = cuenta0 + 1
arch.sysread(1)
valor5.push(valor1)
valor6.push(content)
end
sleep 1
for cuenta2 in 0..dirtotal-1 do
puts "guardado #{nombrearchivo+valor6[cuenta2]}"
save_arch = File.open("#{nombrearchivo+valor6[cuenta2]}", File::CREAT | File::WRONLY | File::TRUNC)
save_arch.syswrite("#{valor5[cuenta2]}") unless File.directory?("#{nombrearchivo+valor6[cuenta2]}") == TRUE
end
puts "Fin"
El código no está terminado, pero con la función push() creo haber podido solucionar la duda que tenía.