boost::iostream zlib сжимает несколько файлов в один архив

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

Что у меня есть до сих пор:

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 архив? предоставленный метод явно не работает, я просто не могу найти ничего по этому вопросу в документах или заголовочных файлах


person cppanda    schedule 10.02.2011    source источник


Ответы (2)


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

Редактировать: по-видимому, zziplib на самом деле не может записывать Zip-файлы, он может только читать их. Тем не менее, я уверен, что небольшое гугление найдет библиотеку, способную написать формат.

person John Bartholomew    schedule 10.02.2011

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

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

person Maxime Oudot    schedule 27.06.2013