我正在寻找一个将 zlib 提取为的包装器:
- 打开压缩文件()
- 获取项目信息(n)
- UnzipItem(n) // 如果项目 n 是目录,则递归解压缩的奖励积分。
我在例如 codeproject.com 上看到很多 zlib 库的包装器,但它们都是特定于平台的,以便提供解压缩到文件/内存缓冲区/管道的附加平台特定功能。
在 boost::iostreams 中可以使用 zlib、gzip 和 bzip2 格式。
在 zlib 源代码存档中,有一个名为“minizip”的贡献。
“minizip”是一组可用于播放 .zip 文件的文件。您需要的基本服务已经存在:
当然,这不是面向对象的(我确信这不是 minizip 的创建者的目标),但是编写一个简单的面向对象的包装器应该很容易。
firstobject 的简单 zlib保持跨平台;它在单个文件 easyzlib.c 中包含 zlib,并且仅公开 ezcompress 和 ezuncompress 函数,并具有在分配确切大小之前确定内存需求的附加功能。
这是一个旧线程,但我想我会加入 Boost 的 ZLib 包装器:
http://www.boost.org/doc/libs/1_47_0/libs/iostreams/doc/classes/zlib.html
如果您将使用 minizip——请注意,zlib 1.2.3 附带的版本有 2GB 导致的 zip 文件限制。IT 将生成大小 >2GB 的 zip - 但您将无法打开它们...
GZStream 值得一看。这是一个很好的围绕 ZLib 的跨平台包装器,它扩展了 STL iostream 类。
http://www.cs.unc.edu/Research/compgeom/gzstream/
与其他一些包装器相比,此包装器的优点在于,如果您正在处理非常大的档案,则无需将整个数据集加载到内存中。
您还可以通过自动检测输入格式来检查这个 C++ Zlib 包装器: https ://github.com/mateidavid/zstr