zlib压缩zip

      使用zlib库将文件或文件夹压缩到zip中的步骤如下:

1.    调用zipOpen()函数,创建一个zipFile对象

2.    调用zipOpenNewFileInZip()函数,在zipFile对象中创建一个文件或文件夹,并将其设为当前文件。若创建的是文件夹,直接执行步骤4;否则执行步骤3

3.    读取被压缩文件的数据,调用zipWriteInFileInZip()函数,将数据写入当前文件中。可进行多次写入

4.    调用zipCloseFileInZip()函数,关闭当前文件

5.    若有多个文件或者文件夹,反复执行步骤2,3,4

6.    将全部数据写入zipFile对象后,调用zipClose()函数来关闭创建的zipFile对象

如此,压缩完成。

 

相关函数

1.    zipFile zipOpen (const char *pathname,int append);

根据传入的文件路径,打开/创建一个zipFile文件。

关于其参数:

①   const char *pathname:需要打开/创建的zipFile文件路径

②   int append:参数,其取值有以下三种:

#define APPEND_STATUS_CREATE        (0)	// 创建zipFile文件
#define APPEND_STATUS_CREATEAFTER   (1)	// ?
#define APPEND_STATUS_ADDINZIP      (2)	// 在一个zip文件中追加文件

创建zip文件,使用APPEND_STATUS_CREATE

2.    

int zipOpenNewFileInZip(	zipFile file,					// zip文件
							const char* filename, 			// zip中需要写入的子文件的文件名
							const zip_fileinfo* zipfi,		// 传入一些包括日期在内的zip补充信息
							const void* extrafield_local,	// 本子文件扩展信息
							uInt size_extrafield_local,		// 本子文件扩展信息大小
							const void* extrafield_global, 	// 全局文件扩展信息
							uInt size_extrafield_global, 	// 全局文件扩展信息大小
							const char* comment,			// 注释			
							int method,						// 压缩方式:0-store,ZDEFLATED-deflate
							int level						// 压缩等级:[0,9]。详见下面说明
						);

zipFile文件中打开/创建一个新的子文件或文件夹,并将其设为当前文件。

参数filename结尾是否带有”/”决定了创建的是子文件还是文件夹

注意,filename需要输入一个相对路径。即认为zip文件开始压缩的第一级目录为根目录,所有的子文件及子文件夹的路径都输入相对于该根目录的路径。

例如:

C:/File/MyFile/

C:/File/MyFile/test.txt

C:/File/TestFile/

要对上面的2个文件夹和一个文件进行压缩,进行压缩的根目录设为C:/File/。

那么,以C:/File/为根目录,3个相对路径为:

MyFile/

MyFile/test.txt

TestFile/

压缩时,将这3个相对路径作为参数传给zipOpenNewFileInZip()

若传入的相对路径有多级目录,那么zipOpenNewFileInZip ()会自动创建这些目录

例如,要压缩:

MyFile/

MyFile/test.txt

那么,只需要传入

MyFile/test.txt

MyFile/这个文件夹会被自动创建。

压缩子文件夹相同:

FileA/

FileA/FileB/

FileA/FileB/FileC/

只需要传入

FileA/FileB/FileC/

即可。

3. 

int zipOpenNewFileInZip3_64(	zipFile file, 					// zip文件
								const char* filename, 			// zip中需要写入的子文件的文件名
								const zip_fileinfo* zipfi, 		// 传入一些包括日期在内的zip补充信息
								const void* extrafield_local, 	// 本子文件扩展信息
								uInt size_extrafield_local, 	// 本子文件扩展信息大小
								const void* extrafield_global, 	// 全局文件扩展信息
								uInt size_extrafield_global, 	// 全局文件扩展信息大小
								const char* comment, 			// 注释
								int method,						// 压缩方式:0-store,ZDEFLATED-deflate
								int level,						// 压缩等级:[0,9]。详见2中详细说明
								int raw,						// 若raw=1,则写原始文件
								int windowBits,					// 窗口大小,范围是[8,15]。值越大越好
								int memLevel,					// 压缩时内存分配等级。越大,压缩越快。范围是[1,9],默认为8
								int strategy,					// 压缩算法。详见下面说明
								const char* password,			// 进行加密的密码
								uLong crcForCrypting,			// crc32校验码
								int zip64						// 是否在文件头追加额外信息块
							);

关于参数:

①   int strategy:压缩算法。其取值可以为:

Z_DEFAULT_STRATEGY:常规数据

Z_FILTERED:由过滤器产生的数据

Z_HUFFMAN_ONLY:Huffman编码数据

Z_RLE:游标编码(run-length encoding)

②   int zip64   :若设为1,则在头文件中添加额外信息。如果被压缩文件的原始大小过大,则必须设为1。所谓过大,是指size >=0xffffffff。

4.    int zipWriteInFileInZip (zipFile file,constvoid*bufunsigned len);

向打开的当前子文件中写入数据。

关于其参数:

①   zipFile file:已创建的zipFile文件

②   constvoid*buf:数据缓存区,被压缩文件的原始二进制数据存放在这里

③   unsigned len:从数据缓存区中读出的字节数

5.    int zipCloseFileInZip (zipFile file);

关闭当前打开的子文件/文件夹。

6.    int zipClose (zipFile file,const char* global_comment);

关闭zipFile文件,压缩完成。

const char* global_comment设为NULL即可。

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值