用于缓冲 c++ 的 zip 文件

Posted

技术标签:

【中文标题】用于缓冲 c++ 的 zip 文件【英文标题】:zip-file to buffer c++ 【发布时间】:2015-03-05 11:01:20 【问题描述】:

我必须从 char[] 缓冲区中的 zip 文件中逐字节读取 dat 文件。 zip 文件仅包含一个 dat 文件。我想逐块解压缩会很好。我正在使用带有 c++ 的 Visual Studio 2013。

我找到了 zip-utils (http://www.codeproject.com/Articles/7530/Zip-Utils-clean-elegant-simple-C-Win),这样可以吗,因为它已经快 10 年了? Minizip 会是一个好方法吗?我想仅 zlib 对于这个用例是不够的,对吧?

我的问题是,解压缩的最佳方法是什么?我没有处理 zip 文件的经验,想听听有经验的人的建议。

谢谢,

弗里德里希

【问题讨论】:

【参考方案1】:

Minizip 可以。请注意,它仍然需要 zlib 源代码才能链接。

zip 文件不仅仅是 zlib 压缩内容的块。 这是一个档案。

有一个目录头,即使存档只包含一个文件,您也必须对每个元素头进行解码。通常,标题会告诉您从 zip 文件中的哪个偏移量可以找到您的 DAT 压缩内容。然后你可能会使用 zlib 从给定的偏移量开始逐块解码。

请注意,zip 文件格式并不总是暗示 zlib 是一个压缩器(您可以有许多不同的压缩器)。如果您掌握了创建 zip 文件的代码,这不是问题。但是如果它来自 hostile 用户,那么你应该依赖实际检查使用的压缩器并断言它是 zlib,否则你应该拒绝解压缩文件,因为你将无法这样做。

【讨论】:

感谢您的解释,这是有用的信息!

以上是关于用于缓冲 c++ 的 zip 文件的主要内容,如果未能解决你的问题,请参考以下文章

P/Invoke C++ DLL 用于填充托管缓冲区

什么是 realloc() 的 C++ 版本,用于分配新缓冲区并从旧缓冲区复制内容?

C++ GTKMM,在文本缓冲区中得到一个奇怪的输出

Python中的二进制缓冲区

用于 Spanner API 的协议缓冲区

C++ 缓冲文件读取