如何使用Zlib一次压缩多个文件?

问题描述 投票:0回答:1

我知道minizip可以做到这一点,但这太复杂了。由于某种原因,我只能包含zlib.h

我尝试根据zpipe.c执行此操作。我希望输出一个包含不同文件的.z.gz(不需要包含目录)。

我的方式是

deflateInit()->deflateSetHeader()->fread()->deflate()->fwrite()->deflateEnd()

,然后通过另一种方式再次打开output.z来再次执行此操作。结果是将2个文件压缩为output.z中的一个文件,这可能不是我想要的。

是否可以用几行代码压缩多个文件?

c zlib
1个回答
-1
投票

您可以在基于zpipe.c的代码中合并压缩的输出。不要fclose()输出文件。继续追加。

串联文件的gunzip等效于cat file1 file2。如果你要恢复多个文件,需要自己取消输出文件的大小在基于zpipe.c的代码中。基本上,即使inflate()也要继续fread()还给您Z_STREAM_END。

这里是连接的证明

$ echo "this is file 1" > file1
$ echo "this is file 2" > file2
$ gzip file1
$ gzip file2
$ cat file1.gz file2.gz > files.gz
$ rm file1.gz file2.gz
rm: remove regular file 'file1.gz'? y
rm: remove regular file 'file2.gz'? y
$ gunzip files.gz
$ cat files
this is file 1
this is file 2
© www.soinside.com 2019 - 2024. All rights reserved.