我有一个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)
对不起,如果这很明显.
我对 ZIP 和压缩有一点误解。
最后我决定按照维基百科这个页面实现 ZIP 存档格式。我在 Windows 和 7z 上广泛使用 HxD 工具进行了很多测试。
最后我发现存档的格式很简单,而且只支持1个磁盘,N个带目录的文件,以及基于zlib的压缩。我还使用 zlib 进行 crc32 校验和。
因此,如果将来有人遇到问题,请参阅维基百科上的 zip 格式并使用 zlib 作为 crc32,然后如果您想使用 zlib 压缩块。
感谢大家