2011-02-10 10 views
8

Ho problemi a riempire un gruppo di file in un unico archivio. i documenti di boost sono molto limitati su questo argomento e ho cercato sul web per diverse ore, ma non riesco a trovare una soluzione.boost :: iostream zlib comprime più file in un unico archivio

quello che ho finora:

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){...} 

Come faccio ad aggiungere i file all'archivio zip? il metodo fornito ovviamente non funziona, non riesco a trovare nulla sull'argomento nei documenti o nei file di intestazione

risposta

4

zlib non implementa il formato di file Zip, implementa semplicemente la compressione del flusso utilizzata all'interno di Zip (vedere the zlib FAQ). A mia conoscenza (che dovrei avvertire non è affatto totale), Boost non include funzionalità per leggere o scrivere archivi Zip. Esistono librerie che forniscono la funzionalità , ad esempio, zziplib (nota: il sito sembra essere inattivo al momento).

Modifica: Apparentemente, zziplib in realtà non è in grado di scrivere i file Zip, può solo leggerli. Eppure, sono sicuro che un po 'di google avrebbe creato una libreria in grado di scrivere il formato.

0

So che il post è un po 'vecchio, ma per le persone come me che lo vedono anni dopo.

Ci sono un sacco di Librairies liberi di scrivere e leggere file zip in C (utilizzabile in C++, ovviamente):
- infoZip (ultima versione sembra essere davvero completa e sicura, anche se risale nel 2008);
- libzip, molto più recente, l'ultima versione ha solo due mesi.

Problemi correlati