FAT16文件系统之目录项分析(四)
FAT16文件系統的FDT分析
1:FDT位置
FDT的含義為文件目錄表,它在一個文件系統中的具體位置是緊跟在FAT2之后。
定位過程:
A:系統通過讀取該分區表信息,定位到其DBR扇區
B:讀取DBR的保留扇區數(OEH –0FH).
C:讀取每個FAT扇區數(16H – 17H)
D:讀取FAT表的個數保留扇區當數 + FAT個數 * 每個FAT扇區數
FDT的數據內容
FAT16文件系統目錄項分析
1:目錄項的作用及結構特點
目錄項對于FAT文件系統來講也是很重要的一個組成部分,其主要及結構特點如下
A:分區中的每一個文件中文件夾都被分配一個大小為32字節的目錄項,用心描述文件或文件夾的屬性,大小,起始簇號和時間,日期等信息,那當然也有文件或文件夾的名字
B:在FAT文件系統中,目錄被視為特殊類型的文件,所以每一個目錄也跟文件一樣有目錄項。
C:在FAT16文件系統下,分區根目錄下的文件及文件夾的目錄項存放在FDT中,分區子目錄下的文件及文件夾的目錄項存放在數據區中相應的簇中。
D:根據目錄項的作用及特點,可以把目錄項分為四類
短文件名目錄項長文件名目錄項“.”目錄項和“..”目錄項卷標目錄項
2:短文件名目錄項
所謂的短文件名是指DOS和Windows 3.x時代文件名的傳統格式即“8.3”格式。在這種格式的限制下,用戶在給文件起名字的時候,主文件名不能超過8個字符,并且不支持中文。在這種格式下,文件目錄項中只需要記錄8 + 3 = 11字節就可以保存文件名了,(主文件名與擴展名之間的“.”是默認的,不有記錄),這種格式的目錄項就是短文件名目錄項.
FAT16短文件名目錄項的含義
| 字節偏移 | 字段長度 | 字段內容及含義 | |
| 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)??????文件屬性
文件的各種屬性,表示的方法是按二進制位定義,最高兩位保留未用,
(4)??????未用
(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)??????文件最近訪問日期
同文件創建日期算法一樣
(9)??????未用
(10)??文件修改時間略
(11)??文件修改日期略
(12)??文件起始簇號
是指文件的內容所在的第一個簇號
(13)文件大小以字節大小為單位小端存儲
3:長文件名目錄項
???????? 為了兼容DOS與Winddows 3.x在Winddows 95以上的系統中,超過8.3格式的文件或目錄實際存儲著兩個名字,一個短文件名和一個長文件名。當創建一個長文件名時,其對應的短文件名的處理有以下三個原則:
A:系統取長文件名的前6個字符加上“~1”,形成短文件名,其擴展名保持不變
B:如果已經存在這個名字的文件,數字自動加1,“~2”
C:如果有DOS與Winddows 3.x的非法字符,以“-_”替代。
?
長文件名存儲時,其屬性值為 OFH,能夠存儲13個字符,如果文件名很長,一個長文件名需要多個目錄項,這些目錄是倒序排放在其短文件名的前面。
???????????????????????????????????? FAT16長文件名目錄項的含義
| 字節偏移 | 字段長度 | 字段內容及含義 |
| 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碼字符 |
?
?
特殊說明
(1)??????序列號
0-4位描述了長文件名目錄項的順序號
6位若為1,則表明是目錄項的最后一項
如果文件被刪除,該字節會改為“E5”。
(2)??????文件名字符
如果文件名已經記錄完,但該參數的空間中還有未用的字節,就會在文件名最后一個字符填充兩個00H,隨后未用的填充FFH
?
(3)??????短文件名檢驗和
長文件名目錄項通過這個檢驗和將其與短文件名目錄項關聯起來。檢驗和是通過短文件名計算而來的,同一長文件名的檢驗和必須一致。
?
???????? 校驗和的計算方法是依次將短文件名的各個字符對應的二進制相加,在每一步相加之前先將二進制的值依次向右移動一位,最右邊的位循環移動到最左邊,然后再加上下一個字符所對應的二進制值,直到把最后一個字符加完。
?
4:“.”目錄項(當前目錄)和“..”目錄項(上級目錄)
???????? 在子目錄所在的文件目錄項區域中,總有兩個特殊的目錄,“.”目錄項和“..”目錄項可以用DOS命令的DIR查看到。
說明
A:“.”目錄項所描述的起始簇號,是子目錄本身所在簇號,
B:“..”目錄項所描述的起始簇號,是上一級目錄的起始簇號,如果上級目錄為根目錄,則起始簇號被設置為0.
C:這兩個目錄都大小被設置0,同其他的文件夾目錄項一樣。
系統利用“.”目錄項(當前目錄)和“..”目錄項實現目錄之間的雙向聯系,從而把整個文件系統聯系在一起。
5:卷標目錄項
???????? 卷標可以被隨時修改,存放在FDT中,
?
A:卷標屬于短文件名,最大支持11個字符。
B:不記錄起始簇號與大小
C:不記錄創建時間和最后訪問時間,只記錄修改時間總結
以上是生活随笔為你收集整理的FAT16文件系统之目录项分析(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Zbrush学习关于缩放的三种方式
- 下一篇: 农村污水处理工程的运维相关内容介绍