我知道minizip
可以做到这一点,但这太复杂了。由于某种原因,我只能包含zlib.h
。
我尝试根据zpipe.c
执行此操作。我希望输出一个包含不同文件的.z
或.gz
(不需要包含目录)。
我的方式是
deflateInit()->deflateSetHeader()->fread()->deflate()->fwrite()->deflateEnd()
,然后通过另一种方式再次打开output.z
来再次执行此操作。结果是将2个文件压缩为output.z
中的一个文件,这可能不是我想要的。
是否可以用几行代码压缩多个文件?
您可以在基于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