1

我可以使用 zlib 库函数来压缩文件吗?我尝试使用“gzopen()”进行文件压缩,这实际上是在处理单个文件时存在一些问题。当我尝试使用“WinZip”解压缩输出文件时,输出中不存在文件扩展名。例如。如果我压缩一个名为“test.pdf”的文件,则输出文件名为“test”。(文件内容是正确的。唯一的问题是扩展名)

     fi = (gzFile *)gzopen(destfile,"ab");
     gzwrite(fi,buff,bufflen);
     gzclose(fi);

当我尝试压缩两个不同的文件(例如“test.pdf”和“sample.pdf”)时,使用“WinZip”(“test”)提取后只有一个文件。如何使用 zlip 文件压缩多个文件。我认为问题出在压缩文件中的标头信息上。我可以使用 zlib 压缩文件吗?

4

4 回答 4

3

您可以使用-Nor--name选项gzip让它使用存储在 gzip 文件中的文件名,而不是 gzip 文件的名称。

您不能单独使用 gzip 来存储多个文件。对于 Windows 应用程序,我建议将libzip用于多个文件,它可以对 .zip 文件进行编码和解码。libzip 使用zlib进行压缩和解压缩部分。

于 2012-08-23T01:22:37.807 回答
1

zlib(库)和 gzip(实用程序)并没有真正做任何文件管理。它没有任何文件名的概念,因此 gunzip 实用程序通常只是从提取的文件中删除 .gz 扩展名。gzip 压缩文件中没有嵌入文件名数据,它只是在您解压缩文件时使用文件名。

gzip 也不支持将多个文件一起压缩到同一个存档中。为此,您通常使用 tar 命令创建一个包含要压缩的各个文件的文件,然后 gzip tar 文件。这就是为什么您会经常看到archive.tar.gz 或archive.tgz 的原因。它是用 gzip 压缩的 tar 文件中的一堆文件。

于 2012-08-22T13:57:20.187 回答
1

你可以使用http://gnuwin32.sourceforge.net/packages/libarchive.htm之类的东西来创建一个 tar 并压缩它

于 2012-08-22T13:51:08.690 回答
0

zlib 只做压缩它不处理文件名、文件数据、目录布局等。

Winzip 将所有这些添加到 ZLIB 协议中。在 zlib 发行版中有一个 contrib 库,可为您提供 zip 功能

于 2012-08-22T13:51:48.950 回答