10

我正在寻找一个将 zlib 提取为的包装器:

  1. 打开压缩文件()
  2. 获取项目信息(n)
  3. UnzipItem(n) // 如果项目 n 是目录,则递归解压缩的奖励积分。

我在例如 codeproject.com 上看到很多 zlib 库的包装器,但它们都是特定于平台的,以便提供解压缩到文件/内存缓冲区/管道的附加平台特定功能。

4

8 回答 8

13

在 boost::iostreams 中可以使用 zlib、gzip 和 bzip2 格式。

您可以从http://www.boost.org/找到它

于 2009-01-29T16:44:28.993 回答
9

在 zlib 源代码存档中,有一个名为“minizip”的贡献。

“minizip”是一组可用于播放 .zip 文件的文件。您需要的基本服务已经存在:

  • 解开
  • unzLocateFile
  • unzOpenCurrentFile
  • unzGetCurrentFileInfo
  • unzCloseCurrentFile
  • 取消关闭

当然,这不是面向对象的(我确信这不是 minizip 的创建者的目标),但是编写一个简单的面向对象的包装器应该很容易。

于 2008-11-06T13:15:51.270 回答
3

firstobject 的简单 zlib保持跨平台;它在单个文件 easyzlib.c 中包含 zlib,并且仅公开 ezcompress 和 ezuncompress 函数,并具有在分配确切大小之前确定内存需求的附加功能。

于 2008-11-20T05:34:29.130 回答
2

您可以尝试从另一个 FOSS 项目中获取代码。例如,ScummVM 具有高度可移植的 Zlib 包装器(实现标头),其中包含您需要的所有功能,以及用于与任何其他类型的存档进行通用接口的 OO 层。

也许这是一个很好的起点?包装函数是完全独立且可移植的(哎呀,它们甚至可以在 Nintendo DS 上工作),但是 OO 层依赖于许多自定义类,这些类可能很难添加到您自己的项目中。

于 2008-11-06T14:11:25.387 回答
2

这是一个旧线程,但我想我会加入 Boost 的 ZLib 包装器:

http://www.boost.org/doc/libs/1_47_0/libs/iostreams/doc/classes/zlib.html

于 2011-09-02T01:12:52.910 回答
2

如果您将使用 minizip——请注意,zlib 1.2.3 附带的版本有 2GB 导致的 zip 文件限制。IT 将生成大小 >2GB 的 zip - 但您将无法打开它们...

于 2010-03-05T06:29:18.370 回答
2

GZStream 值得一看。这是一个很好的围绕 ZLib 的跨平台包装器,它扩展了 STL iostream 类。

http://www.cs.unc.edu/Research/compgeom/gzstream/

与其他一些包装器相比,此包装器的优点在于,如果您正在处理非常大的档案,则无需将整个数据集加载到内存中。

于 2009-11-21T12:55:34.577 回答
0

您还可以通过自动检测输入格式来检查这个 C++ Zlib 包装器: https ://github.com/mateidav​​id/zstr

于 2020-08-11T16:03:57.110 回答