boost :: iostream zlib将多个文件压缩到一个存档中

时间:2011-02-10 18:32:37

标签: c++ serialization boost compression 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存档?提供的方法显然不起作用,我只是在文档或头文件中找不到任何关于主题的内容

2 个答案:

答案 0 :(得分:4)

zlib没有实现Zip文件格式,它只是实现Zip中使用的流压缩(参见the zlib FAQ)。据我所知(我应该警告你完全没有),Boost不包括读取或写入Zip档案的功能。有些库确实提供了这个功能,例如,zziplib(注意:此时该网站似乎已关闭)。

编辑:显然,zziplib实际上不能写Zip文件,它只能读取它们。不过,我确信有点谷歌搜索会出现一个能够编写格式的库。

答案 1 :(得分:0)

我知道这篇文章有点陈旧,但对于像我这样多年后看到它的人来说。

有很多免费的库可以在C中编写和读取zip文件(当然可以在C ++中使用):
- infoZip(最新版本似乎非常完整和安全,尽管可以追溯到2008年); - libzip,更近期,最后一个版本只有两个月了。