【问题标题】:boost::iostream zlib compressing multiple files into one archiveboost::iostream zlib 将多个文件压缩到一个存档中
【发布时间】:2011-06-25 01:44:58
【问题描述】:

我无法将一堆文件打包到一个存档中。 boost 文档在这个主题上非常有限,我已经在网上搜索了几个小时,但我找不到解决方案。

到目前为止我有什么:

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 存档中?提供的方法显然不起作用,我只是在文档或头文件中找不到有关该主题的任何内容

【问题讨论】:

    标签: c++ serialization boost compression zlib


    【解决方案1】:

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

    编辑:显然,zziplib 实际上不能写入 Zip 文件,它只能读取它们。不过,我确信稍微用谷歌搜索一下就会发现一个能够编写该格式的库。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-25
        • 2010-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-23
        相关资源
        最近更新 更多