C++跨平台zlib简化器包装程序

11

我正在寻找一个将zlib简化为以下函数的封装:

  1. OpenZipFile()
  2. GetItemInfo(n)
  3. UnzipItem(n) // 如果项目n是目录,递归解压缩将得到额外的奖励分数。

我在codeproject.com等网站上看到了很多关于zlib库的封装,但它们都是特定于平台的,以提供解压缩到文件/内存缓冲区/管道的特定于平台的功能。


所以你已经在CodeProject上找到了一个符合你要求的项目,现在唯一需要做的就是:FILE *file = fopen(filename, "wb"); fwrite(buf, buf_len, 1, file); fclose(file); - Andreas Magnusson
8个回答

13
在boost::iostreams中,可以使用zlib、gzip和bzip2格式。
您可以在http://www.boost.org/找到相关信息。

2
boost::iostream::zlib_compressor 不兼容实际的 zip 格式。 - user707779

9
在zlib源代码存档中,有一个名为“minizip”的贡献。 "minizip"是一组文件,您可以使用它们来处理.zip文件。您需要的基本服务已经存在:
- unzOpen - unzLocateFile - unzOpenCurrentFile - unzGetCurrentFileInfo - unzCloseCurrentFile - unzClose 当然,这不是面向对象的(我相信这不是minizip的创建者的目标),但编写一个简单的面向对象包装器应该很容易。

哇,这些文件已经8年了!嘿嘿! - leeand00
它在cvs中;嗯,是的,我猜那时候他们用的就是版本控制。 - leeand00
1
嘿,我不在乎它已经8年了,只要它还能编译,我就会使用它! - leeand00

4

firstobject的易用zlib是跨平台的;它将zlib封装在一个单独的文件easyzlib.c中,并且只公开了ezcompress和ezuncompress函数,还增加了在分配确切大小之前确定内存需求的功能。


2

GZStream值得一看。这是一个不错的跨平台封装器,它扩展了STL iostream类,基于ZLib。

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

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


嘿,那个看起来不错!七年了...我会尝试编译它。 - craesh

2

2
如果您使用minizip,请注意,随zlib 1.2.3一起提供的版本有2GB的zip文件大小限制。它可以生成大于2GB的zip文件,但您将无法打开它们...

2
你可以尝试从另一个自由开源软件项目中获取代码。例如,ScummVM具有高度可移植的Zlib包装器(实现, 头文件),其中包含您需要的所有函数,以及用于通用地与任何其他类型的存档进行接口的面向对象层。

也许这是一个好的起点?包装器函数完全独立且可移植(甚至可以在Nintendo DS上工作),但是面向对象层依赖于许多定制类,可能难以添加到您自己的项目中。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接