zlib c++并提取文件
我已经开始使用 zlib 1.2.5,但我没有看到任何从 zip 文件中提取的例程?我读到了一个 minizip 应用程序,它是发行版的一部分。
这是应该做的吗?
I have started to use zlib 1.2.5 and I do not see any routine to extract from a zip file? I read about a minizip application, part of the distribution.
Is that how it is supposed to be done?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的,它做得很好。 (但是,如果您不喜欢 C 代码,您应该查看 7-zip SDK,其中包含 C++ 和 C# 代码。)
unzip.h 中
(请参阅 contrib\minizip\unzip.h 和 contrib\minizip\zip.h)
例如解压:
zip 文件的
unzOpen()
函数返回一个unzFile
,然后使用
unzGoToFirstFile()
和unzGoToNextFile()
使用unzFile
浏览存档中的所有文件。然后您可以使用
unzGetCurrentFileInfo()
获取每个文件的文件信息,即文件的大小,当然您应该在某个时刻调用
unzOpenCurrentFile()
。并使用文件信息中的大小调用unzReadCurrentFile(),检索存档文件的二进制内容。
或者,您可以提供一个不透明的结构,以便使用您自己的 i/o 函数,但显然,有一个用于文件访问的默认 win32 实现,因此您甚至可以不用担心这一点。
PS:并且不要忘记调用
unzCloseCurrentFile()
。Yes, it does it well. (But if ever you don't like C code, you should look at 7-zip SDK that have code in C++ and C#.)
unzip.h
zip.h
(look at contrib\minizip\unzip.h and contrib\minizip\zip.h)
For example, decompressing:
the
unzOpen()
functions of your zip file returns aunzFile
then use
unzGoToFirstFile()
andunzGoToNextFile()
on thisunzFile
to browse through all files in the archive.then you get the file info for each file with
unzGetCurrentFileInfo()
, namely for its size,surely you should call
unzOpenCurrentFile()
at some moment.and call
unzReadCurrentFile()
using the size from file info, retrieving the binary content of the archived file.optionally, there is an opaque structure you can provide so as to use your own i/o function, but obviously, there is a default win32 implementation for file access, so you could even not worry about that.
PS: and dont forget to call
unzCloseCurrentFile()
.来自: 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 提供更多详细信息。
From: http://www.zlib.net/zlib_faq.html#faq11 :
11. Can zlib handle .zip archives?
Not by itself, no. See the directory contrib/minizip in the zlib distribution.
There's not a tutorial there but the minizip zip.c source is exactly for IO (so presumably compression and decompression) on zip files using zlib.
And still no tutorial BUT http://www.winimage.com/zLibDll/minizip.html gives more details.
我围绕 minizip 构建了一个包装器,添加了一些我需要的功能,并使其使用起来更好。它确实使用最新的 c++11 并使用 Visual Studio 2013 开发(应该是可移植的,但我还没有在 unix 上测试过)
这里有完整的描述: https://github.com/sebastiandev/zipper
您可以压缩整个文件夹、流、向量等。还有一个很好的功能是完全在内存中完成所有操作。
I have built a wrapper around minizip adding some features that I needed and making it nicer to use it. Is does use the latest c++11 and is developed using Visual Studio 2013 (should be portable, but I haven't tested it on unix)
There's a full description here: https://github.com/sebastiandev/zipper
you can zip entire folders, streams, vectors, etc. Also a nice feature is doing everything entirely in memory.