- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用ZLIB开发的WINZIP文件管理器
使用ZLIB开发的WINZIP文件管理器
一、ZIP文件结构ZIP文件基本结构如下:
{分文件头信息+文件压缩数据}+中心目录+中心目录记录结束符
?
更详细的说明如下:
每个分文件头信息后面紧跟此文件压缩数据。如果压缩方式是不压缩,就是该文件的从第1个字节一直到最后一个字节的原始字节流;如果压缩方式是deflate,压缩数据就是经过deflate算法压缩过的字节流。
ZIP文件中通常有若干个分文件数据,最多可达到65535个。
文件的最后修改时间和日期按MS-DOS时间日期格式编码。时间和日期均为16位整数。
对于时间,16位格式分配如下:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 小时 分 秒 对于日期,16位格式分配如下:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 年-1980 月 日 ZIP文件使用32位CRC校验码检查数据是否有误。
ZIP文件中单个文件和ZIP文件本身字节数不能大于4G,否则会出错。
文件名实际长度由文件名长这个字段指定,文件名中可以包含路径,但不包含驱动器盘符(要特别注意的是,所有路径分割符’\’都要转换为’/’,并且路径中第一个字符不能是’/’)。
外部文件属性这个字段,最低1个字节是文件的DOS属性字节,其它字节均设为0)。其中DOS属性字节格式如下:
7 6 5 4 3 2 1 0 未用 未用 档案 目录 卷标 系统 隐藏 只读 分文件头相对位移和中心目录初始偏移都是按字节表示的相对于ZIP文件开始位置的偏移量,用于在ZIP文件中准确定位。
中心目录中每个文件都可以有注释,用户可以将需要保存的额外信息保存在该字段中。
二、ZLIB使用说明
ZLIB的作者是文件压缩方面的专家,通过一系列复杂的算法实现了deflate这种格式的压缩与解压,并且为开发人员提供了相对简单的函数接口。
ZLIB流格式在RFC1950中有详细的定义。对于ZLIB流,除去流中开头的2个字节和结尾的4个字节,中间的连续字节流即经过deflate转换的压缩流。
ZLIB是开放源代码的,可以从上下载源代码包,也可以下载编译好的Windows系统下的DLL。目前最新的ZLIB版本为1.2.3,dll文件名为zlib1.dll,头文件名为zlib.h,还需要用一个zconf.h。
本程序一共使用了ZLIB提供的6个函数,其中压缩函数3个,解压函数3个。
压缩要用到deflateInit、deflate、deflateEnd这3个函数,解压要用到inflateInit,inflate,inflateEnd这3个函数。
deflateInit在压缩开始之间调用,压缩结束后调用deflateEnd;同样,解压之前调用inflateInit,解压完成后调用inflateEnd。这4个函数都很好理解。
关键函数是deflate进行压缩,inflate进行解压。
deflate函数有两个参数,stream和flush。stream是一个结构体变量,有next_in、avail_in、next_out、avail_out这四个变量。next_in表示当前输入的字节数组,avail_in表示当前可用的输入字节数;next_out表示当前输出的字节数组,avail_out表示当前可用的输出字节数。当输入数据没有结束时flush设为Z_NO_FLUSH,否则设为Z_FINISH。next_out要至少比next_in大0.0015%。
inflate函数参数和deflate相同,但flush总是设为Z_NO_FLUSH。
为压缩整个文件,应当循环调用deflate函数进行数据压缩。同样,也要循环调用inflate函数进行解压。当avail_out这个变量为0时,表示输出缓冲已满,这时需要将next_out中数据写入文件,写入字节数由next_out大小-avail_out决定。然后重新调用deflate进行压缩或inflate进行解压。
三、程序开发过程
本程序使用Visual C++ 6.0开发。使用MFC AppWizard生成基于对话框的应用程序框架。
主对话框截图如图1所示。
图1 主界面
主对话框中加入菜单,包括文件和动作两个子菜单,其中文件菜单中只有一个打开菜单项,用于打开ZIP文件。动作菜单有加入、删除、解出三个菜单项。
菜单下面是一个MSFlexGrid控件,用于显示ZIP文件中的文件。
主对话框底部有三个标签,用于显示有关信息。
用户单击文件菜单的打开命令,会出现打开文件对话框,用于打开或新建ZIP文件。
用户单击动作菜单中的加入命令,会出现选择文件对话框,由用户选择要加入的文件。
选择文件对话框截图如2所示。
图2选择文件对话框
该
您可能关注的文档
- 作文用心感受生活课件.ppt
- 作文指导 从生活的小事中挖掘人生哲理.doc
- 作文:一路上有你 讲评.ppt
- 作物育种学总论第3章第三章育种目标.ppt
- 作文教学 胜似亲人.ppt
- 你即将进入一个魔幻世界.ppt
- 你所不知道的社会化营销案例.doc
- 你所见过的最全校花集合.doc
- 你所不知道的太阳和月亮的知识.doc
- 你的天下,只有她;而她,却不是你的——记《美人心计》:从刘盈到窦长君.docx
- 2023年江苏省镇江市润州区中考生物二模试卷+答案解析.pdf
- 2023年江苏省徐州市邳州市运河中学中考生物二模试卷+答案解析.pdf
- 2023年江苏省苏州市吴中区中考冲刺数学模拟预测卷+答案解析.pdf
- 2023年江苏省南通市崇川区田家炳中学中考数学四模试卷+答案解析.pdf
- 2023年江西省吉安市中考物理模拟试卷(一)+答案解析.pdf
- 2023年江苏省泰州市海陵区九年级(下)中考三模数学试卷+答案解析.pdf
- 2023年江苏省苏州市高新二中中考数学二模试卷+答案解析.pdf
- 2023年江苏省南通市九年级数学中考复习模拟卷+答案解析.pdf
- 2023年江苏省南通市海安市九年级数学模拟卷+答案解析.pdf
- 2023年江苏省泰州市靖江外国语学校中考数学一调试卷+答案解析.pdf
文档评论(0)