2010-03-18 3 views
5

J'ai un programme Ruby qui zippe une arborescence de fichiers XML en utilisant la gemme rubyzip. Mon problème est que le fichier commence à être lourd et je voudrais augmenter le niveau de compression, car le temps de compression n'est pas un problème.Définir le niveau de compression lors de la génération d'un fichier ZIP à l'aide de RubyZip

Je ne pouvais pas trouver dans le rubyzip documentation un moyen de spécifier le niveau de compression pour le fichier ZIP créé.

Quelqu'un sait comment modifier ce paramètre? Y at-il une autre bibliothèque Ruby qui permet de spécifier le niveau de compression?

Répondre

8

Voici le code que j'ai créé en regardant rubyzip interne.

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

vous obtiendrez probablement une meilleure traction en criant au programme 'zip' ou quoi ne pas faire le zipping.

+0

Ce programme est destiné à fonctionner sur de nombreuses plateformes. Je ne veux pas forcer l'utilisateur à spécifier son programme de compression et comment l'utiliser. Je préférerais une solution Ruby. Merci –

+1

Plonger dans la source pourrait être votre seule option alors. – rogerdpack

Questions connexes