我根据规范读取zip文件,并从中央目录获取每个文件的信息。从我读到的标题:
#define VERSION_NEEDED_OFSSET 6
UINT16 versionNeeded = (UINT16)*(zipFile + VERSION_NEEDED_OFSSET);
所以我压缩了一些文件,还有一些目录,当我得到有关该目录的信息时,我得到versionNeeded = 0x000a
从我阅读的文档中:
所需的最低支持ZIP规范版本 提取文件,如上所示映射。该值基于 ZIP程序必须支持的特定格式 能够提取文件。如果有多个功能 应用于文件,必须将最小版本设置为 具有最高价值的特征。新功能或新功能 影响已发布格式规范的更改将是 使用比上一个更高的版本号实现 公布价值以避免冲突。
4.4.3.2当前的最小特征版本如下定义:
1.0 - 默认值
1.1 - 文件是卷标
2.0 - 文件是文件夹(目录)
但是用于确定文件类型的zip标头的部分是什么?我无法从documentation中看到任何负责文件类型的类型或位。
答案 0 :(得分:0)
确定。如果有人发现这一点,正确的方法是检查中心目录的偏移量加上 38 ,一个名为外部文件属性的字段
来自文档:
4.4.15外部文件属性:(4字节)外部属性的映射取决于主机系统(参见'由'制作的版本)。对于 MS-DOS,低位字节是MS-DOS目录属性字节。如果 输入来自标准输入,该字段设置为零。
UINT32 external_attributes = (UINT32)*(zipFile + 38);
然后将此值与MSDN中的this常量进行匹配。
要匹配目录,请比较external_attributes
,如下所示:
if(external_attributes == 0x10) //FILE_ATTRIBUTE_DIRECTORY