2011-02-10 9 views
8

tengo problemas para empaquetar un grupo de archivos en un solo archivo. los documentos de refuerzo son muy limitados sobre este tema y he buscado en la web durante varias horas, pero no puedo encontrar una solución.boost :: iostream zlib comprimiendo múltiples archivos en un solo archivo

lo que tengo hasta el momento:

boost::filesystem::ofstream ofsArchive("some.zip"); 
boost::iostreams::filtering_ostreambuf outFilter; 
boost::iostreams::zlib_params zparam(boost::iostreams::zlib::default_compression); 

try 
{ 
    // set up the filter 
    outFilter.strict_sync(); 
    outFilter.push(boost::iostreams::zlib_compressor(zparam)); 
    outFilter.push(ofsArchive); 


    for(each object of some kind) 
    { 
     // create a binary serialized file 
     boost::filesystem::ofstream ofs(filename, std::ios_base::binary); 
     boost::archive::binary_oarchive bin_oa(ofs); 
     bin_oa << crazyObject; 

     // here's where i'm stuck. how to add multiple files to the "some.zip"? 
     boost::iostreams::copy(ofs, outputArchive); 
    } 
} 
catch(boost::iostreams::zlib_error& e){...} 

¿Cómo se añaden los archivos en el archivo zip? el método provisto obviamente no funciona, simplemente no puedo encontrar nada sobre el tema en los documentos o archivos de encabezado

Respuesta

4

zlib no implementa el formato de archivo Zip, simplemente implementa la compresión de flujo utilizada dentro de Zip (ver the zlib FAQ) Que yo sepa (que debo advertirle que de ninguna manera es total), Boost no incluye la funcionalidad para leer o escribir archivos Zip. Hay bibliotecas que proporcionan esa funcionalidad por supuesto, por ejemplo, zziplib (nota: el sitio parece estar inactivo en este momento).

Editar: Aparentemente, zziplib en realidad no puede escribir archivos Zip, solo puede leerlos. Aún así, estoy seguro de que un poco de google aparecería en una biblioteca capaz de escribir el formato.

0

Sé que la publicación es un poco antigua, pero para personas como yo que la vemos años después.

Hay un montón de Librairies gratuitas para escribir y leer archivos zip en C (utilizable en C++, por supuesto):
- infoZip (última versión parece ser realmente completa y segura, a pesar de que data de 2008);
- libzip, mucho más reciente, la última versión tiene solo dos meses de antigüedad.

Cuestiones relacionadas