我已经开始使用zlib 1.2.5了,我没有看到从zip文件中提取的任何例程?我读到了一个minizip应用程序,这是发行版的一部分。
应该怎么做?
答案 0 :(得分:21)
是的,它做得很好。 (但是,如果你不喜欢C代码,你应该看看有C ++和C#代码的7-zip SDK。)
unzip.h
zip.h
(查看contrib\minizip\unzip.h和contrib\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
你可以压缩整个文件夹,流,矢量等。另外一个很好的功能就是完全在内存中完成所有工作。