确定文件是否是zip存档中的目录

时间:2016-09-02 10:27:02

标签: c header zip

我根据规范读取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中看到任何负责文件类型的类型或位。

1 个答案:

答案 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