C ++跨平台zlib simplifer-wrapper

时间:2008-11-06 02:11:07

标签: c++ zlib

我正在寻找一个将zlib提炼为:

的包装器
  1. OpenZipFile()
  2. GetItemInfo(n)的
  3. UnzipItem(n)//如果项目n是目录,则递归解压缩的加分点。
  4. 我看到很多关于zlib库的包装器,比如codeproject.com,但它们都是特定于平台的,以便提供解压缩到文件/内存缓冲区/管道的附加平台特定功能。

8 个答案:

答案 0 :(得分:12)

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

您可以从http://www.boost.org/

找到它

答案 1 :(得分:9)

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

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

  • unzOpen
  • unzLocateFile
  • unzOpenCurrentFile
  • unzGetCurrentFileInfo
  • unzCloseCurrentFile
  • unzClose

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

答案 2 :(得分:3)

firstobject's easy zlib保持跨平台;它在单个文件easyzlib.c中有zlib,并且只显示ezcompress和ezuncompress函数,并增加了在分配精确大小之前确定内存需求的功能。

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

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

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

这个包装器对其他一些包装器的好处是,如果你使用非常大的存档,则不需要将整个数据集加载到内存中。

答案 5 :(得分:2)

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

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

答案 6 :(得分:1)

如果您将使用minizip - 请注意,zlib 1.2.3附带的版本有2GB的zip文件限制。 IT将生产尺寸> 2GB的拉链 - 但你将无法打开它们......

答案 7 :(得分:0)

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