C++库:用于原地修改ZIP文件

5

我正在寻找一种方法来添加或删除现有ZIP归档文件中的文件,或者任何其他跨平台API支持的归档格式,而不必每次重新编写包含新文件或删除文件后的新zip文件。对于ZIP文件,目录被放置在文件末尾,因此每次可能需要重写zip文件的某些部分。我只是想避免每次都要重新编写整个文件。我要处理的归档文件将非常大,速度很重要。

是否存在任何可实现我所需功能的C++库?

3个回答

4

Zipios++ 提供了直接访问 ZIP 归档文件中的文件的功能。


很遗憾,Zipios++只适用于Linux系统,我无法在Windows上编译成功 :/ - Lukasz Czerwinski
@LukaszCzerwinski,不应该有任何特定于操作系统的功能,因此编译失败可能是由于库不兼容。我猜你可以通过一些毅力让它编译成功。 - Sparr
1
更重要的是,在撰写本文时,Zipios 似乎仍不支持 Zip64。因此,如果您继续向存档中添加文件,并且最终大小超过 4 GiB,那么您将会遇到麻烦。(如果文件数量超过 65K,情况也是一样的)。 - ScumCoder

1

miniz库允许您通过一个函数调用将文件附加到现有存档而无需重写它:

mz_zip_error error = MZ_ZIP_NO_ERROR;
mz_bool status = mz_zip_add_mem_to_archive_file_in_place_v2("foo.zip", "bar.txt", "Test", 4, "Comment", 7, MZ_BEST_COMPRESSION, &error);

1
它还支持Zip64,因此文件的大小和数量没有(实际)限制。 - ScumCoder

0

唉,据我上次检查,7zip API 仅适用于 Windows。 - Grant Limberg
无论如何,7zip SDK 支持LZMA压缩标准,但是似乎没有方便支持zip格式的功能。现在以上列出了两个更常见的库。 - Adam Davis
1
http://www.zlib.net/ 是与gzip相关的库的正确地址(上面的URL主要是关于一个可执行文件,而不是一个库)。 - John Zwinck
3
GZip和ZLib并不是"zip"文件。 - SoapBox
Zlib确实需要额外的工作来支持zip归档格式,但压缩是相同的。听起来Zipios++正好是他想要的,我会将此留给其他人参考。 - Adam Davis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接