1,短目录和长目录:
短目录和长目录都是放在Data region里的,一个directory entry占用32byte,具体参考下表:
Short directory entry
| Name | Offset (byte) | Size (bytes) | Description | 
| DIR_Name | 0 | 11 | Short name. | 
| DIR_Attr | 11 | 1 | File attributes: ATTR_READ_ONLY 0x01 ATTR_HIDDEN 0x02 ATTR_SYSTEM 0x04 ATTR_VOLUME_ID 0x08 ATTR_DIRECTORY 0x10 ATTR_ARCHIVE 0x20 ATTR_LONG_NAME ATTR_READ_ONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID The upper two bits of the attribute byte are reserved and should always be set to 0 when a file is created and never modified or looked at after that. | 
| DIR_NTRes | 12 | 1 | Reserved for use by Windows NT. | 
| DIR_CrtTimeTenth | 13 | 1 | Millisecond stamp at file creation time. | 
| DIR_CrtTime | 14 | 2 | Time file was created. | 
| DIR_CrtDate | 16 | 2 | Date file was created. | 
| DIR_LstAccDate | 18 | 2 | Last access date. | 
| DIR_FstClusHI | 20 | 2 | High word of this entry’s first cluster number (always 0 for a FAT12 or FAT16 volume). | 
| DIR_WrtTime | 22 | 2 | Time of last write. | 
| DIR_WrtDate | 24 | 2 | Date of last write. | 
| DIR_FstClusLO | 26 | 2 | Low word of this entry’s first cluster number. | 
| DIR_FileSize | 28 | 4 | 32-bit DWORD holding this file’s size in bytes.所以FAT32支持文件的最大大小为4G | 
DIR_Name不能包含以下字符:
1, 任何小于0X20值的字符,除了0x05(0X05代表的含义是该目录entry可以被重新使用,删除一个文件的时候用0x05来覆盖DIR_Name[0,如果DIR_Name[0]的值为0,表示该entry可以被使用~之前没有被使用过)
2,0x22, 0x2A, 0x2B, 0x2C, 0x2E, 0x2F, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x5B, 0x5C, 0x5D, and 0x7C.
Shaort name举例如下:
“foo.bar” -> “FOO BAR”
“FOO.BAR” -> “FOO BAR”
“Foo.Bar” -> “FOO BAR”
“foo” -> “FOO “
“foo.” -> “FOO “
“PICKLE.A” -> “PICKLE A “
“prettybg.big” -> “PRETTYBGBIG”
“.big” -> illegal, DIR_Name[0] cannot be 0x20
Data format:
a date relative to the MS-DOS epoch of 01/01/1980
| Bits | Description | 
| 15-9 | Year (0 = 1980, 127 = 2107) | 
| 8-5 | Month (1 = January, 12 = December) | 
| 4-0 | Day (1 - 31) | 
Time format:
The valid time range is from Midnight 00:00:00 to 23:59:58
| Bits | Description | 
| 15-11 | Hours (0-23) | 
| 10-5 | Minutes (0-59) | 
| 4-0 | Seconds/2 (0-29) | 
long directory entry
| Name | Offset (byte) | Size (bytes) | Description | 
| LDIR_Ord | 0 | 1 | The order of this entry in the sequence of long dir entries associated with the short dir entry at the end of the long dir set. 
 | 
| LDIR_Name1 | 1 | 10 | Characters 1-5 of the long-name sub-component in this dir entry. | 
| LDIR_Attr | 11 | 1 | Attributes - must be ATTR_LONG_NAME | 
| LDIR_Type | 12 | 1 | If zero, indicates a directory entry that is a sub-component of a long name.  NOTE: Other values reserved for future extensions. Non-zero implies other dirent types. | 
| LDIR_Chksum | 13 | 1 | Checksum of name in the short dir entry at the end of the long dir set. | 
| LDIR_Name2 | 14 | 12 | Characters 6-11 of the long-name sub-component in this dir entry. | 
| LDIR_FstClusLO | 26 | 2 | Must be ZERO. This is an artifact of the FAT "first cluster" and must be zero for compatibility with existing disk utilities. It's meaningless in the context of a long dir entry. | 
| LDIR_Name3 | 28 | 4 | Characters 12-13 of the long-name sub-component in this dir entry. | 
Example:
当一个文件名字是"The quick brown.fox". 以下的表格说明了它是如何存放在directory entry里的。
FAT32对文件名以及文件路径的限制:
1, 短目录名可以包含任何字母数字以及下面的字符:
$ % ' - _ @ ~ ` ! ( ) { } ^ # &
2, 长目录名不能包含如下字符
+ , ; = [ ]
3, 短目录名路径最大长度是8+3,端目录完整路径长度最大为80(包含最后的结束NUL字符)
4, 长目录完整路径最大为255(不包含最后的NUL字符)
5, 长目录entry是通过UNICODE来放具体名字的字符的,2个byte对应一个字符,区分大小写。
6, 短目录entry是不区分大小写的。
 
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号