zlib c++并提取文件

发布于 2024-10-12 10:08:27 字数 96 浏览 3 评论 0原文

我已经开始使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

海螺姑娘 2024-10-19 10:08:27

是的,它做得很好。 (但是,如果您不喜欢 C 代码,您应该查看 7-zip SDK,其中包含 C++ 和 C# 代码。)

  • 用于浏览和解压缩 zip 存档中的文件的所有函数都在 unzip.h 中
  • 所有用于压缩文件并将文件添加到 zip 存档的函数都在 zip.h 中

(请参阅 contrib\minizip\unzip.hcontrib\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#.)

  • All the functions to browse and uncompress the files from a zip archive are in unzip.h
  • All the functions to compress and add files to a zip archive are in zip.h

(look at contrib\minizip\unzip.h and contrib\minizip\zip.h)

For example, decompressing:
the unzOpen() functions of your zip file returns a unzFile

then use unzGoToFirstFile() and unzGoToNextFile() on this unzFile 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().

掩饰不了的爱 2024-10-19 10:08:27

来自: 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.

独留℉清风醉 2024-10-19 10:08:27

我围绕 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文