【问题标题】:C++ Library for modifying a ZIP file in place用于修改 ZIP 文件的 C++ 库
【发布时间】:2010-10-09 17:19:47
【问题描述】:

我正在寻找一种在现有 ZIP 存档或任何其他存档格式中添加或删除文件的方法,只要存在跨平台 API,而无需使用新的 zip 文件重写添加到其中的文件,或从其中删除的项目。

对于 ZIP 文件,目录放置在文件的末尾,因此每次都可能需要重写 zip 文件的某些部分。我只是想避免每次都重写整个事情。我要处理的存档文件会很大,而且速度很重要。

是否有任何 C++ 库可以满足我的需求?

【问题讨论】:

    标签: c++ zip archive


    【解决方案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);
    

    【讨论】:

    • 它还支持 Zip64,因此对文件的大小和数量没有(实际)限制。
    【解决方案2】:

    Zipios++ 提供对 ZIP 存档中文件的直接访问。

    【讨论】:

    • 不幸的是 Zipios++ 仅适用于 Linux,我无法在 Windows 上编译:/
    • @LukaszCzerwinski 不应该有任何特定于操作系统的功能,因此编译失败可能是由于库不兼容。我怀疑你可以坚持不懈地编译它。
    • 更重要的是,在撰写本文时,Zipios 似乎仍然不支持 Zip64。因此,如果您不断将文件添加到您的存档中并且最终增长到 4 GiB 以上,那么您就有麻烦了。 (如果文件数量超过 65K,则相同)。
    【解决方案3】:

    有几个 zip 库可用,其中两个领先的库是:

    http://www.gzip.org/

    http://www.info-zip.org/

    -亚当

    【讨论】:

    • 唉,我上次检查时 7zip API 只是 Windows。
    • 不管怎样,7zip SDK 支持 LZMA 压缩标准,但对 zip 的支持似乎并不容易。现在上面列出了两个更常见的库。
    • zlib.net 是与 gzip 相关的库的正确地址(上面的 URL 是一个网站,主要是关于可执行文件,而不是库)。
    • GZip 和 ZLib 不是“zip”文件。
    • Zlib 确实需要额外的工作来支持 zip 存档格式,但压缩是相同的。不过,听起来 Zipios++ 正是他所追求的。我会把这个留给其他人参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多