FAT文件系统原理(四)
对于短文件格式的目录项。其参数意义见表14:
表14 FAT32短文件目录项32个字节的表示定义 |
字节偏移(16进制) |
字节数 |
定义 |
0x0~0x7 |
8 |
文件名 |
0x8~0xA |
3 |
扩展名 |
0xB* |
1 |
属性字节 |
00000000(读写) |
00000001(只读) |
00000010(隐藏) |
00000100(系统) |
00001000(卷标) |
00010000(子目录) |
00100000(归档) |
0xC |
1 |
系统保留 |
0xD |
1 |
创建时间的10毫秒位 |
0xE~0xF |
2 |
文件创建时间 |
0x10~0x11 |
2 |
文件创建日期 |
0x12~0x13 |
2 |
文件最后访问日期 |
0x14~0x15 |
2 |
文件起始簇号的高16位 |
0x16~0x17 |
2 |
文件的最近修改时间 |
0x18~0x19 |
2 |
文件的最近修改日期 |
0x1A~0x1B |
2 |
文件起始簇号的低16位 |
0x1C~0x1F |
4 |
表示文件的长度 |
* 此字段在短文件目录项中不可取值0FH,如果设值为0FH,目录段为长文件名目录段 |
说明: (1)、这是FAT32短文件格式目录项的意义。其中文件名、扩展名、时间、日期的算法和FAT16时相同的。 (2)、由于FAT32可寻址的簇号到了32位二进制数。所以系统在记录文件(文件夹)开始簇地址的时候也需要32位来记录,FAT32启用目录项偏移0x12~0x13来表示起始簇号的高16位。 (3)、文件长度依然用4个字节表示,这说明FAT32依然只支持小于4GB的文件(目录),超过4GB的文件(目录),系统会截断处理。
FAT32的一个重要的特点是完全支持长文件名。长文件名依然是记录在目录项中的。为了低版本的OS或程序能正确读取长文件名文件,系统自动为所有长文件名文件创建了一个对应的短文件名,使对应数据既可以用长文件名寻址,也可以用短文件名寻址。不支持长文件名的OS或程序会忽略它认为不合法的长文件名字段,而支持长文件名的OS或程序则会以长文件名为显式项来记录和编辑,并隐藏起短文件名。 当创建一个长文件名文件时,系统会自动加上对应的短文件名,其一般有的原则: (1)、取长文件名的前6个字符加上"~1"形成短文件名,扩展名不变。 (2)、如果已存在这个文件名,则符号"~"后的数字递增,直到5。 (3)、如果文件名中"~"后面的数字达到5,则短文件名只使用长文件名的前两个字母。通过数学操纵长文件名的剩余字母生成短文件名的后四个字母,然后加后缀"~1"直到最后(如果有必要,或是其他数字以避免重复的文件名)。 (4)、如果存在老OS或程序无法读取的字符,换以"_"
长文件名的实现有赖于目录项偏移为0xB的属性字节,当此字节的属性为:只读、隐藏、系统、卷标,即其值为0FH时,DOS和WIN32会认为其不合法而忽略其存在。这正是长文件名存在的依据。将目录项的0xB置为0F,其他就任由系统定义了,Windows9x或Windows 2000、XP通常支持不超过255个字符的长文件名。系统将长文件名以13个字符为单位进行切割,每一组占据一个目录项。所以可能一个文件需要多个目录项,这时长文件名的各个目录项按倒序排列在目录表中,以防与其他文件名混淆。 长文件名中的字符采用unicode形式编码(一个巨大的进步哦),每个字符占据2字节的空间。其目录项定义如表15。
表15 FAT32长文件目录项32个字节的表示定义 |
字节偏移 (16进制) |
字节数 |
定义 |
0x0 |
1 |
属性字节位意义 |
7 |
保留未用 |
6 |
1表示长文件最后一个目录项 |
5 |
保留未用 |
4 |
顺序号数值 |
3 |
2 |
1 |
0 |
0x1~0xA |
10 |
长文件名unicode码① |
0xB |
1 |
长文件名目录项标志,取值0FH |
0xC |
1 |
系统保留 |
0xD |
1 |
校验值(根据短文件名计算得出) |
0xE~0x19 |
12 |
长文件名unicode码② |
0x1A~0x1B |
2 |
文件起始簇号(目前常置0) |
0x1C~0x1F |
4 |
长文件名unicode码③ |
本新闻共 6页,当前在第 5页 1 2 3 4 5 6 |