我根据规范读取 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 标头中用于确定文件类型的部分是什么?我看不到任何与文件类型有关的类型或位文档 https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT.
好的。如果有人发现这个,正确的方法是检查中央目录开始的偏移量加上38,一个名为外部文件属性
从文档中:
4.4.15 外部文件属性:(4 字节)外部属性的映射取决于主机系统(参见“版本由”)。为了
MS-DOS,低位字节是MS-DOS目录属性字节。如果
输入来自标准输入,该字段设置为零。
UINT32 external_attributes = (UINT32)*(zipFile + 38);
然后你将这个值与this https://msdn.microsoft.com/en-us/library/windows/desktop/gg258117(v=vs.85).aspx来自 MSDN 的常量。
要匹配目录,请比较external_attributes
像这样:
if(external_attributes == 0x10) //FILE_ATTRIBUTE_DIRECTORY
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)