boost :: iostream zlib сжимает несколько файлов в один архив - PullRequest
8 голосов
/ 10 февраля 2011

У меня проблемы с упаковкой файлов в один архив. Документы для ускорения очень ограничены по этой теме, и я искал в Интернете несколько часов, но не могу найти решение.

Что у меня есть:

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

как мне добавить файлы в zip-архив? предоставленный метод, очевидно, не работает, я просто не могу найти что-либо по теме в документах или заголовочных файлах

Ответы [ 2 ]

4 голосов
/ 10 февраля 2011

zlib не реализует формат файла Zip, он просто реализует сжатие потока, используемое в Zip (см. FAQ по zlib ).Насколько мне известно (что я должен предупредить вас, ни в коем случае не полный), Boost не включает в себя функциональность для чтения или записи Zip-архивов.Существуют библиотеки, которые предоставляют такую ​​функциональность , конечно, например, zziplib (примечание: сайт в данный момент не работает).zziplib на самом деле не может записывать Zip-файлы, он может только читать их.Тем не менее, я уверен, что небольшое прибегание к поиску приведет к появлению библиотеки, способной записывать формат.

0 голосов
/ 27 июня 2013

Я знаю, что пост немного устарел, но для таких людей, как я, которые видят его много лет спустя.

Существует множество бесплатных библиотек для записи и чтения zip-файлов на C (можно использовать в C ++, конечно):
- infoZip (последняя версия кажется действительно полной и безопасной, хотя датируется 2008 годом);
- libzip , гораздо более свежая, последней версии всего два месяца.

...