zlib c ++和解压缩文件

时间:2011-01-14 23:07:04

标签: c++ c zlib

我已经开始使用zlib 1.2.5了,我没有看到从zip文件中提取的任何例程?我读到了一个minizip应用程序,这是发行版的一部分。

应该怎么做?

3 个答案:

答案 0 :(得分:21)

是的,它做得很好。 (但是,如果你不喜欢C代码,你应该看看有C ++和C#代码的7-zip SDK。)

  • 从zip存档中浏览和解压缩文件的所有功能都在:unzip.h
  • 压缩文件并将文件添加到zip存档中的所有功能都在:zip.h

(查看contrib\minizip\unzip.hcontrib\minizip\zip.h

例如解压缩: zip文件的unzOpen()函数返回unzFile

然后在unzGoToFirstFile()上使用unzGoToNextFile()unzFile来浏览档案中的所有文件。

然后您将获得unzGetCurrentFileInfo()的每个文件的文件信息,即其大小

肯定你应该在某个时候致电unzOpenCurrentFile()

并使用fileinfo中的大小调用unzReadCurrentFile(),检索已归档文件的二进制内容。

可选地,你可以提供一个不透明的结构,以便使用你自己的i / o函数,但显然有一个默认的win32实现文件访问,所以你甚至可以不用担心。

PS:别忘了调用unzCloseCurrentFile()

答案 1 :(得分:6)

来自:http://www.zlib.net/zlib_faq.html#faq11: 11. zlib可以处理.zip档案吗?

不是单独,不是。请参阅zlib发行版中的contrib / minizip目录。

那里没有教程,但minizip zip.c源代码完全适用于使用zlib的zip文件的IO(因此可能是压缩和解压缩)。

仍然没有教程但是http://www.winimage.com/zLibDll/minizip.html提供了更多细节。

答案 2 :(得分:2)

我已经在minizip周围构建了一个包装器,添加了我需要的一些功能并使其更好用。是否使用最新的c ++ 11并使用Visual Studio 2013开发(应该是可移植的,但我还没有在unix上测试过)

这里有完整的说明:https://github.com/sebastiandev/zipper

你可以压缩整个文件夹,流,矢量等。另外一个很好的功能就是完全在内存中完成所有工作。