我正在编写一个服务器,它从客户端接收一个 zip 文件,然后解压缩该文件。当我收到 zip 文件时,我将其存储到内存中。
我找到并尝试了一些库来压缩一个 zip 文件,比如 zlib 和 minizip,但是它们都解压了一个存在于磁盘上的文件,而不是来自内存。
我不想暂时将文件保存到磁盘中并提取它,它效率不高。
如何从内存中解压文件?我在 Windows 上编写 C 和 C++。
看看libarchive 它支持 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));
zlib 支持内存中的 inflate() 和 deflate() 函数。你可以从这里阅读如何
libzip(基于 zlib)具有从内存打开存档的功能。示例代码在 github 上。
src = zip_source_buffer_create(data, size, 1, &error)
za = zip_open_from_source(src, 0, &error)