2010-03-18 16 views
5

Tengo un programa Ruby que comprime un árbol de directorios de archivos XML utilizando la gema rubyzip. Mi problema es que el archivo está empezando a ser pesado y me gustaría aumentar el nivel de compresión, ya que el tiempo de compresión no es un problema.Establecer nivel de compresión al generar un archivo ZIP usando RubyZip

No pude encontrar en el rubyzip documentation una forma de especificar el nivel de compresión para el archivo ZIP creado.

¿Alguien sabe cómo cambiar esta configuración? ¿Hay otra biblioteca de Ruby que permita especificar el nivel de compresión?

Respuesta

8

Aquí está el código que he creado al mirar interno de rubyzip.

level = Zlib::BEST_COMPRESSION 
Zip::ZipOutputStream.open(zip_file) do |zip| 
    Dir.glob("**/*") do |filename| 
     entry = Zip::ZipEntry.new("", filename) 
     entry.gather_fileinfo_from_srcpath(filename) 
     zip.put_next_entry(entry, nil, nil, Zip::ZipEntry::DEFLATED, level) 
     entry.get_input_stream { |is| IOExtras.copy_stream(zip, is) } 
    end 
end 
0

probablemente obtendrá una mejor tracción llamando al programa 'zip' o qué no hacer el comprimido.

+0

Este programa está diseñado para ejecutarse en muchas plataformas. No quiero obligar al usuario a especificar su programa de compresión y cómo usarlo. Preferiría una solución de Ruby. Gracias –

+1

Bucear en la fuente puede ser su única opción entonces. – rogerdpack

Cuestiones relacionadas