使用zlib压缩目录

dza*_*ada 7 c++ zip zlib

我有一个C++应用程序,需要使用标准的压缩格式的目录.我想过使用zip格式.因此,zlib显而易见.

我的问题是构建字典,即将包含一些zlib文件的目录压缩到标准zip文件.

我已经读过zlib做了但我不明白怎么做.我检查了minzip代码.它似乎使用gzip.我可以构建自己的格式,但我希望能够使用7z打开这些文件进行调试(以防万一).

我应该在zlib中使用什么来压缩目录?

[编辑] 在minzip 我使用minzip压缩1文件到它的gz版本 - >不拉链但对我来说很好.(我将在世界各种编译器上使用它 - 如果客户端平台出现问题,则标准格式更容易)

此外,还有这个代码main.它在文件列表上循环并将其写入输出.但是档案中文件位置的信息在哪里?

    do {
        if (uncompr) {
            if (copyout) {
                file = gzopen(*argv, "rb");
                if (file == NULL)
                    fprintf(stderr, "%s: can't gzopen %s\n", prog, *argv);
                else
                    gz_uncompress(file, stdout);
            } else {
                file_uncompress(*argv);
            }
        } else {
            if (copyout) {
                FILE * in = fopen(*argv, "rb");

                if (in == NULL) {
                    perror(*argv);
                } else {
                    file = gzdopen(fileno(stdout), outmode);
                    if (file == NULL) error("can't gzdopen stdout");

                    gz_compress(in, file);
                }

            } else {
                file_compress(*argv, outmode);
            }
        }
    } while (argv++, --argc);
Run Code Online (Sandbox Code Playgroud)

对不起,如果这很明显.

Mar*_*ler 6

查看minizip.c以获取如何使用minizip创建zip文件的示例.minizip位于zlib发行版的contrib目录中,这意味着它是第三方贡献的代码.它不是zlib库的一部分.

请注意,gzip 不是zip.zlib格式不是zip.原始deflate数据不是zip.这些都是不同的格式.原始DEFLATE数据是允许的压缩格式之一的zip格式,而事实上是最常见的.zlib对于处理zip文件非常有用,但它本身并不能这样做.zlib本身仅提供压缩和解压缩引擎以及CRC计算.


dza*_*ada 3

我对 ZIP 和压缩有一点误解。

最后我决定按照维基百科这个页面实现 ZIP 存档格式。我在 Windows 和 7z 上广泛使用 HxD 工具进行了很多测试。

最后我发现存档的格式很简单,而且只支持1个磁盘,N个带目录的文件,以及基于zlib的压缩。我还使用 zlib 进行 crc32 校验和。

因此,如果将来有人遇到问题,请参阅维基百科上的 zip 格式并使用 zlib 作为 crc32,然后如果您想使用 zlib 压缩块。

感谢大家