在FAT32文件系统下,分区根目录下的文件及文件夹的目录项存放在根目录区中,分区子目录下的文件及文件
夹的目录项存放在子目录区中,根目录和子目录区都在数据区中。
FAT32目录项类型
FAT32与FAT16目录项一样分为四类
短文件名目录项
长文件名目录项
“.”目录项和“..”目录项
卷标目录项
FAT32短文件名目录项分析
FAT32与FAT16只有短文件有区别,其他三类完全一样,这里只是讲述FAT32的短文件名
FAT32短文件名目录项的含义
字节偏移 | 字段长度 | 字段内容及含义 | |
0x00 | 8 | 主文件名 | |
0x08 | 3 | 文件的扩展名 | |
0x0B | 1 | 文件属性 | 00000000(读/写) 0x00 |
00000001(只读) 0x01 | |||
00000010(隐藏) 0x20 | |||
00000100(系统) 0x40 | |||
00001000(卷标) 0x08 | |||
00010000(子目录)0x10 | |||
00100000(存档) 0x20 | |||
0x0C | 1 | 未用 | |
0x0D | 1 | 文件创建时间精确到10ms的值 | |
0x0E | 2 | 文件创建时间,包括时,分,秒 | |
0x10 | 2 | 文件创建日期,包括年,月,日 | |
0x12 | 2 | 文件最近访问日期,包括年,月,日 | |
0x14 | 2 | 文件起始簇号的最高位 | |
0x16 | 2 | 文件修改时间,包括时,分,秒 | |
0x18 | 2 | 文件修改日期,包括年,月,日 | |
0x1A | 2 | 文件的起始簇号的低位 | |
0x1c | 4 | 文件大小(以字节为单位) |
参数详细分析
(1)主文件名
文件名用不完8个字节,后面用空格(0x20)填充。
另外该位置的第一个字节也用来表示目录项的分配状态,当这个字节为 0x00时,表示该目录从未用过,当这个
字节是0xE5时,表示该目录项曾经使用过,但目前已经被删除。
(2)文件扩展名
没有扩展名的用空格填充
(3)文件属性
文件的各种属性,表示的方法是按二进制位定义,最高两位保留未用,
(1) 未用
(5)文件创建时间精确到10ms的值
文件在创建时的时间值中精确到10ms的值用该字节表示。例如:86H,十进制为134,所以文件创建的时间为
1340ms,即1.34s.
(6)文件创建时间
A:0-4位,这5位记录秒的值,单位是2s,也就是把这四位的值乘以2,才是秒的值,其取值范围为0-29.
B:5-10位,这6位记录分的值,其取值范围为0-59.
C:11-15位,这5位记录时的值,其取值范围为0-23
计算出来的值再加上1340ms。才是文件最终的创建时间。.
(7)文件创建日期
A:0-4位,这5位记录日的值,其取值范围为0-31
B:5-8位,这4位记录月的值,其取值范围为0-12.
C:9-15位,这7位记录年的值,其取值相对于1980年开始计数的,其值必须加上1980。
(8)文件最近访问日期
同文件创建日期算法一样
(1) 文件起始簇号的高位
是指文件的内容所在的第一个簇号
(2) 文件修改时间略
(3) 文件修改日期略
(12)文件起始簇号低位
是指文件的内容所在的第一个簇号
(13)文件大小以字节大小为单位小端存储
FAT32长文件名目录项分析
长文件名目录项
为了兼容DOS与Winddows 3.x在Winddows 95以上的系统中,超过8.3格式的文件或目录实际存储着两
个名字,一个短文件名和一个长文件名。当创建一个长文件名时,其对应的短文件名的处理有以下三个原则:
A:系统取长文件名的前6个字符加上“~1”,形成短文件名,其扩展名保持不变
B:如果已经存在这个名字的文件,数字自动加1,“~2”
C:如果有DOS与Winddows 3.x的非法字符,以“_”替代。
长文件名存储时,其属性值为 OFH,能够存储13个字符,如果文件名很长,一个长文件名需要多个目录项,
这些目录是倒序排放在其短文件名的前面。
FAT32长文件名目录项的含义
字节偏移 | 字段长度 | 字段内容及含义 |
0x00 | 1 | 序列号 |
0x01 | 10 | 文件名的第1-5个Unicode码字符 |
0x0B | 1 | 属性标志 OFH固定值 |
0x0C | 1 | 保留未用 |
0x0D | 1 | 短文件名检验和 |
0x0E | 12 | 文件名的第6-11个Unicode码字符 |
0x1A | 2 | 始终为0 |
0x1c | 2 | 文件名的第12-13个Unicode码字符 |
特殊说明
(4) 序列号
0-4位描述了长文件名目录项的顺序号
6位若为1,则表明是目录项的最后一项
如果文件被删除,该字节会改为“E5”。
(5) 文件名字符
如果文件名已经记录完,但该参数的空间中还有未用的字节,就会在文件名最后一个字符填充两个00H,随后
未用的填充FFH
(6) 短文件名检验和
长文件名目录项通过这个检验和将其与短文件名目录项关联起来。检验和是通过短文件名计算而来的,同一长
文件名的检验和必须一致。
校验和的计算方法是依次将短文件名的各个字符对应的二进制相加,在每一步相加之前先将二进制的值依
次向右移动一位,最右边的位循环移动到最左边,然后再加上下一个字符所对应的二进制值,直到把最后一个字
符加完。
“.”目录项(当前目录)和“..”目录项(上级目录)
在子目录所在的文件目录项区域中,总有两个特殊的目录,“.”目录项和“..”目录项可以用DOS命令的DIR查
看到。
说明
A:“.”目录项所描述的起始簇号,是子目录本身所在簇号,
B:“..”目录项所描述的起始簇号,是上一级目录的起始簇号,如果上级目录为根目录,则起始簇号被设置为0.
C:这两个目录都大小被设置0,同其他的文件夹目录项一样。
系统利用“.”目录项(当前目录)和“..”目录项实现目录之间的双向联系,从而把整个文件系统联系在一起。
卷标目录项
卷标可以被随时修改,存放在FDT中,
A:卷标属于短文件名,最大支持11个字符。
B:不记录起始簇号与大小
C:不记录创建时间和最后访问时间,只记录修改时间
FAT32文件系统根目录与子目录的管理
FAT32文件系统对于根目录下文件和管理,统一在数据区中的根目录为这些文件创建目录项,并由FAT
表为文件的内容分配簇存放数据。而根目录的首簇由格式化程序决定,并存放在DBR的BPB中。如果根目录
下的目录项数目过多,这些文件的目录项在根目录区的首簇存放不下,FAT表就会为根目录分配新的簇来存
放根目录下文件及文件夹的目录项。
根目录管理步骤
第1步:定位DBR
第2步:定位根目录首簇
第3步:定位目录项
第4步:定位FAT
第5步:定位数据区
子目录管理步骤
第1步:定位DBR
第2步:定位根目录首簇
第3步:定位子目录项
第4步:定位子目录簇
第5步:定位子目录文件
第6步:定位FAT
第7步:定位数据区