C++ 如何在C中解压已经加载到内存中的zip文件?

C++ 如何在C中解压已经加载到内存中的zip文件?,c++,c,zip,unzip,C++,C,Zip,Unzip,我正在编写一个服务器,它从客户机接收一个zip文件,并解压缩该文件。 当我收到zip文件时,我将其存储到内存中 我找到并尝试了一些库来升级zip文件,比如zlib和minizip,但它们都是从磁盘上解压文件,而不是从内存中解压 我不想临时将文件保存到磁盘并提取它,这样效率不高 如何从内存中解压文件? 我在Windows上编写C和C++。./P>< P>ZLIB支持内存中的()和()函数。你可以从中阅读如何查看 它支持zip格式 在内存中提取存档文件的示例: struct archive *a =

我正在编写一个服务器,它从客户机接收一个zip文件,并解压缩该文件。 当我收到zip文件时,我将其存储到内存中

我找到并尝试了一些库来升级zip文件,比如zlib和minizip,但它们都是从磁盘上解压文件,而不是从内存中解压

我不想临时将文件保存到磁盘并提取它,这样效率不高

如何从内存中解压文件?
我在Windows上编写C和C++。./P>< P>ZLIB支持内存中的()和()函数。你可以从

中阅读如何查看 它支持zip格式

在内存中提取存档文件的示例:

struct archive *a = archive_read_new();
archive_read_support_compression_gzip(a);
archive_read_support_format_tar(a);
r = archive_read_open_memory(a, buff, sizeof(buff));
libzip(基于zlib)具有从内存打开归档文件的功能。示例代码是


请检查此StackOverflow问题的答案:。我不使用Qt,quazip似乎是特定于Qt的。@Celebi:它不支持.zip格式是什么意思?它是为处理zip格式而创建的。如果不起作用,请检查标题。可能即使扩展名是.zip,实际使用的压缩算法是lzma或其他东西。@LeleDumbo zlib的常见问题解答说它不处理.zip存档。“请参阅zlib发行版中的contrib/minizip目录”。但是minizip handle.zip是从文件存档的,而不是从内存。@LeleDumbo:
zlib
支持充气/放气压缩算法,该算法在.zip文件中使用。但是它与.zip文件本身没有任何关系,需要做一些其他的事情来从.zip文件中提取各种不同的压缩文件,并分别通过zlib运行每个文件。如果它有帮助,考虑与媒体文件类比:你有一个编码,但你也有一个容器格式。zip文件(又名PKZIP)是一种容器格式。@SteveJessop,zlib只是一个压缩库。为了提取.zip文件,我们需要编写额外的代码。你能帮我们举个简单的例子吗?我的项目也需要一个类似的例子。我需要读取zip文件并读取/解压缩内存中某个特定文件的内容。@程序员:Raymond对这个问题的回答包括一个指向BSD许可程序的链接。看看处理PKZIP格式的示例代码。如果它太复杂,那么“minizip”可能更简单,搜索它。
src = zip_source_buffer_create(data, size, 1, &error)
za = zip_open_from_source(src, 0, &error)