经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
zip相关知识梳理(一)
来源:cnblogs  作者:会吃鱼的鱼  时间:2018/12/10 9:46:12  对本文有异议

zip相关知识梳理(一)

经过对zip文件的长时间研究,对zip文件进行相关知识进行梳理,虽然网上很多牛人对其做了相关基础解析,但是对于特殊情况没有进行说明,比如超过4G的zip文件该以什么格式进行编译,现本人对其进行详细讲解。如有不足,欢迎各位大神指点!

一、zip文件格式

  1. zip文件格式:
  2. [本地文件头1]
  3. [文件数据1]
  4. [数据描述符1]
  5. .
  6. .
  7. .
  8. [本地文件头n]
  9. [文件数据n]
  10. [数据描述符n]
  11. [存档解密标题](EFS
  12. [存档额外数据记录](EFS
  13. [核心目录]
  14. [zip64中心目录记录结束]
  15. [中央目录定位器的zip64端]
  16. [中央目录记录结束]

因此压缩源文件数据区包括三个部分:[本地文件头] + [档案数据] + [数据描述符]

1.本地头文件

用于标识该文件的开始,记录了该压缩文件的信息。

Offset Bytes description
0 4 文件头标识,固定值(0x04034b50)
4 2 解压文件所需的pkware最低版本
6 2 通用比特标志位
8 2 压缩方式
10 2 文件最后修改时间
12 2 文件最后修改日期
14 4 CRC-32校验码
18 4 压缩后的大小
22 4 未压缩的大小
26 2 文件名长度
28 2 扩展区长度
30 n 文件名
30+n m 扩展区

其中通用标志位具体参数获取如下:

Bytes description
0 如果设置,表示文件已加密
2 1

0 0 正常压缩方式

0 1 最大压缩方式

1 0 快速压缩方式

1 1 最快压缩方式

3 如果设置此位,CRC-32与未压缩大小在头文件中设为0,正常值放到数据描述符中
4 位方法8保留,为了增强压缩
5 如果置位,表示该文件为压缩的补充数据
6 如果置位,则提取值所需的版本设置为至少 50,并需要结合位0,提取值所需的版本必须 至少为51
7 目前未使用
8 目前未使用
9 目前未使用
10 目前未使用
11 目前未使用
12 由PKWARE保留以增强压缩
13 在加密中央目录时使用,以指示本地标题中的选定数据值被屏蔽以隐藏其实际值
14 由PKWARE保留
15 由PKWARE保留

2.文件数据

记录压缩后文件的数据

3.数据描述符

用于标识该文件压缩结束,该结构只有在相应的local file header中通用标记字段的第3bit设为1时才会出现,紧接在压缩文件源数据后。这个数据描述符只用在不能对输出的 ZIP 文件进行检索时使用。

Offset Bytes description
0 4 CRC-32校验码
4 4 压缩后的大小
8 4 未压缩的大小

4.核心目录

录了压缩文件的目录信息,在这个数据区中每一条纪录对应在压缩源文件数据区中的一条数据。

Offset Bytes description
0 4 核心目录标识,固定值(0x02014b50)
4 2 解压文件所需的pkware最低版本
6 2 解压所需pkware版本
8 2 通用位标志
10 2 压缩方法
12 2 文件最后修改时间
14 2 文件最后修改日期
16 4 CRC-32校验码
20 4 压缩后的大小
24 4 未压缩的大小
28 2 文件名长度
30 2 扩展域长度
32 2 文件注释长度
34 2 文件开始位置的磁盘编码
36 2 内部文件属性
38 4 外部文件属性
42 4 本地文件头的相对位移
46 n 目录文件名
46+n m 扩展域
46+n+m k 文件注释内容

5.目录结束标识

目录结束标识存在于整个归档包的结尾,用于标记压缩的目录数据的结束。每个压缩文件必须有且只有一个EOCD记录。

Offset Bytes description
0 4 核心目录结束标记(0x06054b50)
4 2 当前磁盘编码
6 2 核心目录开始位置的磁盘编号
8 2 该磁盘上所记录的核心目录数量
10 2 核心目录结构总数
12 4 核心目录的大小
16 4 核心目录开始位置相对于archive开始的位移
20 2 注释长度
22 n 注释内容

6.zip64核心目录结束记录符(4G以上zip文件会用到)

Offset Bytes description
0 4 zip64核心目录结束标志,固定值(0x06064b50)
4 8 核心目录的大小
12 2 版本标识
14 2 版本
16 4 磁盘编码
20 4 核心目录的开始的磁盘编码
24 8 zip中压缩文件的数目
32 8 zip中整个文件的数目
40 8 核心目录的总条数
48 8 核心目录相对于磁盘开始的偏移

7.zip64核心目录定位结束符(4G以上zip文件会用到)

Offset Bytes description
0 4 zip64核心目录定位结束符标志位,固定值(0x07064b50)
4 4 核心目录开始的磁盘编号
8 8 核心目录末端的相对偏移
16 4 磁盘总数
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号