我可以使用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来压缩文件吗?
答案 0 :(得分:3)
您可以使用-N
或--name
选项gzip
让它使用存储在gzip文件中的文件名而不是gzip文件的名称。
您不能单独使用gzip来存储多个文件。对于Windows应用程序,我建议libzip用于多个文件,这些文件对.zip文件进行编码和解码。 libzip使用zlib作为压缩和解压缩部分。
答案 1 :(得分:1)
您可以使用类似http://gnuwin32.sourceforge.net/packages/libarchive.htm的内容来创建tar和zip
答案 2 :(得分:1)
zlib(库)和gzip(实用程序)实际上并没有进行任何文件管理。它没有任何文件名的概念,因此通常gunzip实用程序只是从提取的文件中删除.gz扩展名。 gzip压缩文件中没有嵌入文件名数据,只需解压缩文件名即可。
gzip也不支持将多个文件压缩到同一个存档中。为此,通常使用tar命令创建一个包含要压缩的单个文件的文件,然后gzip tar文件。这就是为什么你会看到archive.tar.gz或archive.tgz的原因。它是tar文件中的一堆文件,用gzip压缩。
答案 3 :(得分:0)
zlib只进行压缩,它不处理文件名,文件数据,目录布局等。
Winzip将所有这些添加到ZLIB协议中。在zlib发行版中有一个contrib库,它为您提供了zip函数