當前位置:首頁 » 操作系統 » fat32文件系統源碼

fat32文件系統源碼

發布時間: 2022-06-23 05:10:54

『壹』 FAT32文件系統

FAT32是Windows 95 OSR2版開始推出兼容16位的32位文件系統。最大特點為使用較小的簇(每簇僅為4KB)分配文件單元,大大提高硬碟空間利用率,減少了浪費。單個硬碟的最大容量達到2TB(1TB=1024GB),為海量硬碟的使用者提供了方便。它支持長文件名,能很好運行 DOS、Windows 95-2000的各種版本,但系統開銷要大於FAT16。這種文件系統的安全性仍然較差;FAT32可以兼容FAT16,但無法訪問NTFS分區。對於像Word一類的編輯軟體產生的文本文件而言,在FAT32的機器上建立的文件只有以「純文本」格式存檔,才能在FAT16的電腦中打開,在Windows 95 OSR2、Windows 98中提供了FAT16向FAT32之間的單向轉換功能。
這種格式採用32位的文件分配表,使其對磁碟的管理能力大大增強,突破了fat16對每一個分區的容量只有2gb的限制,運用fat32的分區格式後,用戶可以將一個大硬碟定義成一個分區,而不必分為幾個分區使用,大大方便了對硬碟的管理工作。而且,fat32還具有一個最大的優點是:在一個不超過8gb的分區中,fat32分區格式的每個簇容量都固定為4kb,與fat16相比,可以大大地減少硬碟空間的浪費,提高了硬碟利用效率。
目前,支持這一磁碟分區格式的操作系統有win 97、win 98和win 2000/XP。但是,這種分區格式也有它的缺點,首先是採用fat32格式分區的磁碟,由於文件分配表的擴大,運行速度比採用fat16格式分區的硬碟要慢;另外,由於dos系統和某些早期的應用軟體不支持這種分區格式,所以採用這種分區格式後,就無法再使用老的dos操作系統和某些舊的應用軟體了。

『貳』 文件系統:FAT32,是什麼意思

FAT32 是 WINDOWS 系統中分區格式的一種。該格式採用 32 位的文件分配表(FILE ALLOCATION TABLE),突破了FAT16對每一個分區的容量只有2 GB的限制。由於FAT32分區內不能夠存放大於 4GB 的單個文件,目前已被性能更好的NTFS格式分區所代替。

『叄』 簡述微軟的FAT32文件系統

FAT32是分區格式的一種。這種格式採用32位的文件分配表,使其對磁碟的管理能力大大增強,突破了FAT16對每一個分區的容量只有2 GB的限制。由於現在的硬碟生產成本下降,其容量越來越大,運用FAT32的分區格式後,我們可以將一個大硬碟定義成一個分區而不必分為幾個分區使用,大大方便了對磁碟的管理。但由於FAT32分區內無法存放大於4GB的單個文件,且性能不佳,易產生磁碟碎片。目前已被性能更優異的NTFS分區格式所取代。

分區標識: 0x0B, 0x0C(MBR)EBD0A0A2-B9E5-4433-87C0-68B6B72699C7(GPT)

最大單文件大小: 4 GB (Fat16分區是2 GB )
最大文件數量: 268,435,437
最長檔名限制: 8.3 或者 長文件名255個字元
最大卷大小: 8 TB (在windows 2000和windows XP環境下格式化程序只能創建最大32GBFAT32文件系統,不過可以用如PQ等分區軟體分出大於32GB的FAT32分區,大於32GB的FAT32分區在WIN2000/XP下使用完全正常)
記錄日期: 創建、修改、訪問
日期范圍: 1980年1月1日至2107年12月31日
屬性: 只讀,隱藏,系統,卷標,子目錄,檔案
透明加密:不支持
透明壓縮:不支持
訪問許可:無限制

性能特點
編輯
FAT32(File Allocation Table)具有一個最大的優點:在一個不超過8GB 的分區中,FAT32分區格式的每個簇容量都固定為4KB,與FAT16相比,可以大大地減少磁碟的浪費,提高磁碟利用率。目前,支持這一磁碟分區格式的操作系統有Win95、Win98、Win2000、Win2003、Win Vista、Win7和Win10。部分智能手機也支持對FAT32格式存儲器的直接讀寫(OTG)。但是,這種分區格式也有它的缺點,首先是採用FAT32格式分區的磁碟,由於文件分配表的擴大,運行速度比採用FAT16格式分區的磁碟要慢。

約束
編輯
windows 2000和windows XP能夠讀寫任何大小的FAT32文件系統,但是這些平台上的格式化程序只能創建最大32GB的FAT32文件系統。
在dos系統下可直接訪問fat32分區,而ntfs分區則不能在dos下直接訪問。

缺點
編輯
但FAT有一個嚴重的缺點:當文件刪除後寫入新資料,FAT不會將檔案整理成完整片段再寫入,長期使用後會使檔案資料變得逐漸分散,而減慢了讀寫速度。硬碟碎片整理是一種解決方法,但必須經常整理來保持FAT文件系統的效率。還有就是FAT32分區因為設計缺陷,無法支持超過4GB的單個文件.

磁碟結構
編輯
主啟動區 文件 分配表 #1 文件 分配表 #2 根目錄 其他所有資料...剩下磁碟空間
一個FAT文件系統包括四個不同的部分。

保留扇區
位於最開始的位置。第一個保留扇區是引導區(分區啟動記錄)。它包括一個稱為基本輸入輸出參數塊的區域(包括一些基本的文件系統信息尤其是它的類型和其它指向其它扇區的指針),通常包括操作系統的啟動調用代碼。保留扇區的總數記錄在引導扇區中的一個參數中。引導扇區中的重要信息可以被DOS和OS/2中稱為驅動器參數塊的操作系統結構訪問。

FAT區域
它包含有兩份文件分配表,這是出於系統冗餘考慮,盡管它很少使用,即使是磁碟修復工具也很少使用它。它是分區信息的映射表,指示簇是如何存儲的。

根目錄區域
它是在根目錄中存儲文件和目錄信息的目錄表。在FAT32下它可以存在分區中的任何位置,但是在早期的版本中它永遠緊隨FAT區域之後。

數據區域
這是實際的文件和目錄數據存儲的區域,它占據了分區的絕大部分。通過簡單地在FAT中添加文件鏈接的個數可以任意增加文件大小和子目錄個數(只要有空簇存在)。然而需要注意的是每個簇只能被一個文件佔有,這樣的話如果在32KB大小的簇中有一個1KB大小的文件,那麼31KB的空間就浪費掉了。

啟動扇區
編輯
格式如下
偏移(位元組) 長度(位元組) 說明
0x00 3 跳轉指令(跳過開頭一段區域)
0x03 8 OEM名稱(空格補齊)。 MS-DOS檢查這個區域以確定使用啟動記錄中的哪一部分數據。常見值是IBM 3.3(在「IBM」和「3.3」之間有兩個空格)和MSDOS5.0.
0x0b 2 每個扇區的位元組數。基本輸入輸出系統參數塊從這里開始。
0x0d 1 每簇扇區數
0x0e 2 保留扇區數(包括啟動扇區)
0x10 1 文件分配表數目
0x11 2 最大根目錄條目個數
0x13 2 總扇區數(如果是0,就使用偏移0x20處的4位元組值)
0x15 1 介質描述 0xF8 單面、每面80磁軌、每磁軌9扇區
0xF9 雙面、每面80磁軌、每磁軌9扇區
0xFA 單面、每面80磁軌、每磁軌8扇區
0xFB 雙面、每面80磁軌、每磁軌8扇區
0xFC 單面、每面40磁軌、每磁軌9扇區
0xFD 雙面、每面40磁軌、每磁軌9扇區
0xFE 單面、每面40磁軌、每磁軌8扇區
0xFF 雙面、每面40磁軌、每磁軌8扇區
同樣的介質描述必須在重復復制到每份FAT的第一個位元組。有些操作系統(MSX-DOS 1.0版)全部忽略啟動扇區參數,而僅僅使用FAT的第一個位元組的介質描述確定文件系統參數。
0x16 2 每個文件分配表的扇區(FAT16)
0x18 2 每磁軌的扇區
0x1a 2 磁頭數
0x1c 4 隱藏扇區
0x20 4 總扇區數(如果超過65535,參見偏移0x13)
0x24 4 每個文件分配表的扇區(FAT32)。擴展基本輸入輸出系統參數塊從這里開始。
0x24 1 物理驅動器個數(FAT16)
0x25 1 當前磁頭(FAT16)
0x26 1 簽名(FAT16)
0x27 4 ID (FAT16)
0x28 2 Flags (FAT32)
0x2a 2 版本號 (FAT32)
0x2c 4 根目錄啟始簇 (FAT32)
0x2b 11 卷標(非FAT32)
0x30 2 FSInfo 扇區 (FAT32)
0x32 2 啟動扇區備份 (FAT32)
0x34 2 保留未使用 (FAT32)
0x36 8 FAT文件系統類型(如FAT、FAT12、FAT16)
0x3e 2 操作系統自引導代碼
0x40 1 BIOS設備代號 (FAT32)
0x41 1 未使用 (FAT32)
0x42 1 標記 (FAT32)
0x43 4 卷序號 (FAT32)
0x47 11 卷標(FAT32)
0x52 8 FAT文件系統類型(FAT32)
0x1FE 2 扇區結束符(0x55 0xAA)
這里描述的啟動扇區能在如OS/2 1.3的啟動盤上看到。早期的版本使用一個較短的基本輸入輸出系統參數塊,它們的啟動代碼在前面開始(如OS/2 1.1中是偏移0x2b)。

分配表
編輯
一個分區分成同等大小的簇,也就是連續空間的小塊。簇的大小隨著FAT文件系統的類型以及分區大小而不同,典型的簇大小介於2KB到32KB之間。每個文件根據它的大小可能佔有一個或者多個簇;這樣,一個文件就由這些(稱為單鏈表)簇鏈所表示。然而,這些鏈並不一定一個接著一個在磁碟上存儲,它們經常是在整個數據區域零散的儲存。
文件分配表(FAT)是映射到分區每個簇的條目列表。每個條目記錄下面五種信息中的一種。
●鏈中下一個簇的地址
●一個特殊的文件結束符(EOF)符號指示鏈的結束
●一個特殊的符號標示壞簇
●一個特殊的符號標示保留簇
●0來表示空閑簇
FAT32條目值:
FAT32 描述
0x?0000000 空閑簇
0x?0000001 保留簇
0x?0000002 - 0x?FFFFFEF 被佔用的簇;指向下一個簇
0x?FFFFFF0 - 0x?FFFFFF6 保留值
0x?FFFFFF7 壞簇
0x?FFFFFF8 - 0x?FFFFFFF 文件最後一個簇
注意FAT32隻使用32位中的28位。高4位通常是0但它們是保留位,不要更改它們。在上面的表中它們用問號表示。

目錄表
編輯
目錄表是一個表示目錄的特殊類型文件(現今通常稱為文件夾)。它裡面保存的每個文件或目錄使用表中的32位條目表示。每個條目記錄名字、擴展名、屬性(檔案、目錄、隱藏、只讀、系統和卷)、創建的日期和時間、文件/目錄數據第一個簇的地址,最後是文件/目錄的大小。
除了FAT12和FAT16文件系統中的根目錄表占據特殊的根目錄區域位置之外,所有其它的目錄表都存在數據區域。
合法的DOS文件名包括下面一些字元:
●大寫字母A-Z
●數字0-9
●空格(盡管結尾的空格被作為填充而不是文件名的一部分)
●! # $ amp;amp; ( ) - @ ^ _ ` { } ~ '
●數值 128-255
●DOS文件名位於OEM字元集。
長文件名(LFN)使用一個技巧存儲在FAT文件系統上——在目錄表中添加假的條目。這些條目使用一個普通文件無法使用的卷標屬性標識,普通文件無法使用是由於它們被大多數舊的MS-DOS程序忽略。很顯然,一個只包含卷標的目錄被當作空卷,這樣就允許刪除;使用長文件名創建的文件在從普通的DOS刪除就會發生這樣的情形。
校驗和也允許檢驗長文件名是否與8.3文件名匹配;當一個文件刪除之後使用DOS在同一個目錄位置重新創建之後就會出現不匹配現象。校驗和使用下面的演算法計算。(注意pFcbName是指向如正常目錄條目中所顯示的文件名的指針,例如前八個字元是文件名,最後三個是擴展名。點是隱含的。文件名中沒有使用的空間將使用空格(ASCII 0x20)補齊。例如,「Readme.txt」將記錄為"README TXT"。

特點
編輯
FAT32實際上是文件分區表採取的一種形式,它是相對於FAT16而言的。眾所周知,Dos和Windows95採用的都是FAT16格式。至於FAT32,准確地說是在Windows95OSR2中第一次出現的,之所以沒有宣傳是因為當時該文件系統還不夠成熟,尚處於試探階段。那麼為什麼一定要推出FAT32呢?這主要是由其自身的優越性決定的。
首先,它可以大大地節約磁碟空間。文件在磁碟上是以簇的方式存放的,簇里存放了一個文件就不能再存放另外的文件。假如一個磁碟的分區大小為512MB,基於FAT16的系統的簇的大小為8KB,而FAT32系統的簇的大小僅是4KB,那麼,我們存放一個3KB的文件,FAT16系統就會有5KB的空間被浪費,而FAT32的浪費則會少一些。如果分區達到1GB,FAT16的簇為16KB,而FAT32還是4KB,節省的也就更多了。
在推出FAT32文件系統之前,通常PC機使用的文件系統是FAT16。像基於MS-DOS,Win 95等系統都採用了FAT16文件系統。在Win 9X下,FAT16支持的分區最大為2GB。我們知道計算機將信息保存在硬碟上稱為「簇」的區域內。使用的簇越小,保存信息的效率就越高。在FAT16的情況下,分區越大簇就相應的要增大,存儲效率就越低,勢必造成存儲空間的浪費。並且隨著計算機硬體和應用的不斷提高,FAT16文件系統已不能很好地適應系統的要求。在這種情況下,推出了增強的文件系統FAT32。同FAT16相比,FAT32主要具有以下特點:
1. 同FAT16相比FAT32最大的優點是可以支持的磁碟大小達到2TB(2048GB),但是不能支持小於512MB的分區。基於FAT32的Win 2000可以支持分區最大為32GB;而基於 FAT16的Win 2000支持的分區最大2GB。
2. 由於採用了更小的簇,FAT32文件系統可以更有效率地保存信息。如兩個分區大小都為2GB,一個分區採用了FAT16文件系統,另一個分區採用了FAT32文件系統。採用FAT16的分區的簇大小為32KB,而FAT32分區的簇只有4KB的大小。這樣FAT32就比FAT16的存儲效率要高很多,通常情況下可以提高15%。
3. FAT32文件系統可以重新定位根目錄和使用FAT的備份副本。另外FAT32分區的啟動記錄被包含在一個含有關鍵數據的結構中,減少了計算機系統崩潰的可能性。
稍作補充:

功能
編輯
與以前的 FAT 文件系統實現相比,FAT32 提供了以下增強功能:FAT32 支持最大為 2 TB 的驅動器。
注意:Microsoft Windows 2000 僅能支持最大為 32 GB 的 FAT32 分區。
· FAT32 可以更高效地使用空間。FAT32 使用較小的簇(即,對於大小在 8 GB 以內的驅動器,使用 4 KB 的簇),這與大的 FAT 或 FAT16 驅動器相比,可將磁碟空間的使用率提高10% 到 15%。
· FAT32 更穩定可靠。FAT32 可以重新定位根文件夾,而且它使用文件分配表的備份副本,而不是使用默認副本。此外,FAT32 驅動器上的引導記錄也得到擴展,包括了關鍵數據結構的備份副本。因此,與現有的 FAT16 驅動器相比,FAT32 驅動器不容易受單點故障的影響。
· FAT32 更靈活。FAT32 驅動器上的根文件夾是普通的簇鏈,因此它可以位於驅動器上的任何位置。以前對根文件夾數量的限制不復存在。此外,可以禁用文件分配表鏡像,這樣就可以讓文件分配表的副本而不是讓第一個文件分配表處於活動狀態。這些功能允許您動態重調 FAT32 分區的大小。不過要注意,雖然 FAT32 的設計允許這一功能,但 Microsoft 將不在初始版本中實現此功能。

兼容性
編輯
軟硬體的兼容問題
為了與現有程序、網路和設備驅動程序保持最大程度的兼容性,FAT32 盡可能不改動現有的 Windows 體系結構、內部數據結構、應用程序編程介面(API) 和磁碟上的格式。然而,因為需要 4 位元組來存儲簇值,所以許多內部的和磁碟上的數據結構以及發布的 API 都作了修改或擴展。某些情況下,現有的 API 無法在 FAT32 驅動器上運行。大多數程序不會受這些更改的影響。現有工具和驅動程序在 FAT32 驅動器上應能夠繼續正常運行。不過,MS-DOS 塊設備驅動程序(例如 Aspidisk.sys)和磁碟工具需要經過修改才能支持 FAT32 驅動器。
所有 Microsoft 捆綁磁碟工具(格式化、Fdisk、碎片整理、基於 MS-DOS 和 Windows 的磁碟掃描)已經過修改,可以在 FAT32 中正常運行。此外,Microsoft 正在與一些主要設備驅動程序和磁碟工具廠商協作,幫助他們修改其產品以支持 FAT32。
注意:不能使用 Microsoft DriveSpace 或 DriveSpace 3 壓縮 FAT32 卷。
FAT32 性能
轉換到 FAT32 文件系統是您可以在基於 Windows 98 的計算機上實現的最大的一種性能增強。
雙啟動計算機
目前,在 Microsoft 操作系統中,只有 Windows 95 OSR2、Windows 98、Windows 2000 和 Windows Me 可以訪問 FAT32 卷。MS-DOS、Windows 95 原始版和 Windows NT 4.0不識別 FAT32 分區,它們無法從 FAT32 卷啟動。此外,如果使用其他操作系統(例如,Windows 95 或 MS-DOS 啟動盤)啟動計算機,也無法正確訪問 FAT32 卷。
Windows 95 OSR2 和 Windows 98 可以在實模式下啟動(例如為了運行游戲)並可以使用 FAT32 卷。
創建 FAT32 驅動器
在 Windows 95 OSR2、Windows 98 和 Windows Me 中,如果在大小超過 512 兆位元組 (MB) 的硬碟上運行 Fdisk 工具,Fdisk 將提示您是否啟用大磁碟支持。如果回答「是」(啟用大磁碟支持),您創建的任何大於 512 MB 的分區都將被標記為 FAT32 分區。
Windows 98 和 Windows Me 中還帶有一種 FAT32 轉換工具,您可以使用該工具將現有驅動器轉換為 FAT32 文件系統。要使用該轉換工具,請按照下列步驟操作: 1. 單擊開始,依次指向程序、附件、系統工具,然後單擊驅動器轉換器 (FAT32)。
2. 單擊下一步。
3. 單擊希望轉換為 FAT32 文件系統的驅動器,然後單擊下一步。
4. 按照屏幕上的說明操作。
支持范圍
Microsoft 將支持 FAT32 文件系統的功能,以實現無錯讀取和在實模式或保護模式下保存文件。Microsoft 支持 Windows 95 中所帶的實模式和保護模式工具。
對於舊式(較早的)程序,如果它們無法在 FAT32 卷上安裝,或者無法正確保存文件或讀取文件,則您必須與軟體包的生產廠商聯系。
注意:雖然 FAT32 文件系統所支持的硬碟容量最高可以達到 2 TB,但有些硬碟可能會因為計算機基本輸入/輸出系統 (BIOS) INT13 介面的限制而無法包含大於 7.8 GB 的可啟動分區。請與硬體製造商聯系,以確定您計算機的 BIOS 是否支持更新後的 INT13 擴展。
Windows 操作系統使用 FAT32 文件系統時存在以下限制: · 簇不能是 64 千位元組 (KB) 或更大。如果簇為 64 KB 或更大,有些程序(例如安裝程序)在計算磁碟空間時可能會出錯。
· 卷必須包含至少 65,527 個簇,才能使用 FAT32 文件系統。您不能增加使用 FAT32 文件系統的卷上的簇大小,以致於該卷的最終簇數小於 65,527。
· 在使用 FAT32 文件系統的卷上,簇最多是 268,435,445 個。對於文件分配表 (FAT) 的空間,每簇最大為 32 KB,據此計算出的最大磁碟大小大約為 8 太位元組 (TB)。
· Microsoft Windows 95 和 Microsoft Windows 98 附帶的「磁碟掃描」工具是 16 位程序。這樣的程序有一個內存塊,該內存塊的最大分配大小等於 16 MB 減去 64 KB。因此,Windows 95 或 Windows 98 的「磁碟掃描」工具無法處理使用 FAT32 文件系統(其 FAT 大小大於 16 MB 和 64 KB 之差)的卷。使用 FAT32 文件系統的卷上的 FAT 項使用 4 位元組,因此 ScanDisk 無法處理使用定義的簇數大於 4,177,920(包括兩個保留的簇)的 FAT32 文件系統的卷上的 FAT。將 FAT 本身包括在內,按每簇最大 32 KB 計算,卷大小為 127.53 吉位元組 (GB)。
· 您不能減少使用 FAT32 文件系統的卷上的簇大小,以致於 FAT 的最終大小大於 16 MB 與 64 KB 之差。
· 在 Windows 2000 中您無法使用 FAT32 文件系統格式化大於 32 GB 的卷。Windows 2000 FastFAT 驅動程序可以安裝和支持使用 FAT32 文件系統且大於 32 GB的卷(受到其他限制),但是您不能使用格式化工具創建一個這樣的卷。這種現象是設計使然。如果需要創建大於 32 GB 的卷,請改用 NTFS 文件系統。
備註:在嘗試格式化大於 32 GB 的 FAT32 分區時,在進程快結束時格式化會失敗,並出現以下錯誤:
Logical Disk Manager:Volume size too big.
Windows XP 中 FAT32 文件系統的限制
當您在 Windows XP 中使用 FAT32 文件系統時,請注意下列限制: · 簇不能等於或大於 64 KB。如果簇大小為 64 KB 或更大,則有些程序(例如安裝程序)可能會不正確地計算磁碟空間。
· FAT32 卷必須至少包含 65,527 個簇。您不能增加使用 FAT32 文件系統的卷上的簇大小,這樣會導致卷上的簇數少於 65,527 個。
· 如果考慮到以下可變因素,則最大磁碟大小大約為 8 TB:一個 FAT32 卷上允許的最大簇數為 268,435,445,每個簇最大為 32 KB,另外還有文件分配表 (FAT) 所需的空間。
· 您不能減少 FAT32 卷上的簇大小,這樣會導致 FAT 的大小大於 16 MB 減去 64 KB。
· 在 Windows XP 安裝過程中,您不能使用 FAT32 文件系統格式化大於 32 GB 的卷。Windows XP 可以裝入和支持大於 32 GB 的 FAT32 卷(受到其他限制),但是您不能在安裝期間使用 Format 工具創建大於 32 GB 的 FAT32 卷。如果您需要格式化大於 32 GB 的卷,請使用 NTFS 文件系統來格式化。另一種方法是從 Microsoft Windows 98 或 Microsoft Windows Millennium Edition (Me) 啟動盤啟動,然後使用該磁碟上包含的 Format 工具。
有關如何使用 Microsoft Windows 98 或 Microsoft Windows Millennium Edition (Me) 啟動盤格式化硬碟的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
255867 如何使用 Fdisk 和 Format 工具對硬碟進行分區或重新分區
注意:當您在 Windows XP 安裝過程中試圖格式化大於 32GB 的 FAT32 分區時,在格式化過程快結束時操作將會失敗,並且您可能會收到以下錯誤信息:
Logical Disk Manager:Volume size too big.
· MS-DOS(Microsoft Windows 95 的原始版本)和 Microsoft Windows NT 4.0 及更低版本都不能識別 FAT32 分區,因此無法從 FAT32 卷啟動。
· 您不能在 FAT32 分區上創建大於 (2^32)-1 位元組(即 4 GB 減去 1 個位元組)的文件。
FAT32格式理論上可以支持128TB的磁碟,即簇的大小乘簇的數量32K*(2^32),但由於受到軟硬體的限制和其他方面的原因,不可能達到理論值。
FAT32數據恢復原理
由於FAT與FDT對數據的鏈式存儲管理的,可以通過鏈式搜索查找。只有FAT表和FDT配合使用,才能可以統一管理整個磁碟文件,也就可以准確定位被刪除的文件的確切位置。
在 Window操作系統下對文件的刪除工作,是將FDT中該文件的第一個字元改「E5」來表示該文件已經刪除,同時改寫引導扇區的第二個扇區中表示該分區點用空間大小的相應信息。因此,在設計的時候,根據其存儲結構,對相應的地方進行修改,搜索E5刪除標志,再按被刪文件數據鏈進行恢復。
具體步驟如下:
(1) 獲取磁碟分區類型,分區存儲空間,FAT、FDT、文件等存儲的起始扇區。
(2) 獲取FAT、FDT表項內的簇信息,即簇的刪除、未使用、壞簇、以及文件佔用簇的起始扇區信息等。
(3) 通過FAT、FDT計算不同文件在物理扇區的起始位置,包括有標識E5的刪除文件起始位置、文件類型、佔用大小和存儲的所在簇。
(4) 改變刪除位,通過第3步得到的結果,並按FAT表對文件進行鏈式查找並緩存,當達到文件所在簇尾時,停止操作。
(5) 對存儲的數據進行轉換,生成文件。
(6) 對文件進行異區存儲。 而操作系統在讀寫文件時,會根據FDT中的起始單元,結合FAT表就可以知道文件在磁碟的具體位置,然後順序讀取每個簇的內容,文件的查找如圖4-1所示。具體的方法如下:
(1)在文件目錄項FDT中找到存放在FAT表中的文件File的地址M(2)2*M得到FAT表中File文件數據鏈表首地址B。
(3)在FAT表中的B地址中,存放有文件FILE數據鏈表頭P。
(4)P*4得到在FAT表項中的下一個偏移位置,即下一個數據鏈表。
(5)如果下一個數據鏈表內的信息為0FFFFFFH,則表示文件存儲已經結束圖4-1查找文件流程需要說明的是,新建文件時,系統在FAT表中查找未用的簇記錄在新文件目錄項中做為首簇;FDT文件目錄項中,第0~7位元組為文件名(若有剩餘位元組用20填充)第1位元組表明了該文件的狀態,第1位元組又表明了文件的狀態,00HE5H及其它字元。當該位元組為00H時,表示該目錄項是空表項,可以使用。當為E5H時,表示該目錄項以前用過,但是文件被已經刪除了。

小知識
編輯
在FAT32下,一個目錄只能夠容納65536個文件。微軟的官方文檔沒有給出。

『肆』 什麼是FAT32文件系統

Windows95 OSR2和Windows 98開始支持FAT32文件系統,它是對早期DOS的FAT16文件系統的增強,由於文件系統的核心--文件分配表FAT由16位擴充為32位,所以稱為FAT32文件系統。在一邏輯盤(硬碟的一分區)超過 512 兆位元組時使用這種格式,會更高效地存儲數據,減少硬碟空間的浪費,一般還會使程序運行加快,使用的計算機系統資源更少,因此是使用大容量硬碟存儲文件的極有效的系統。本人對Windows 98下的FAT32 文件系統做了分析實驗,總體上與FAT16文件系統變化不大,現將有關變化部分簡介如下:

(一)FAT32 文件系統將邏輯盤的空間劃分為三部分,依次是引導區(BOOT區)、文件分配表區(FAT區)、數據區(DATA區)。引導區和文件分配表區又合稱為系統區。

(二)引導區從第一扇區開始,使用了三個扇區,保存了該邏輯盤每扇區位元組數,每簇對應的扇區數等等重要參數和引導記錄。之後還留有若干保留扇區。而FAT16文件系統的引導區只佔用一個扇區,沒有保留扇區。

(三)文件分配表區共保存了兩個相同的文件分配表,因為文件所佔用的存儲空間(簇鏈)及空閑空間的管理都是通過FAT實現的,FAT如此重要,保存兩個以便第一個損壞時,還有第二個可用。文件系統對數據區的存儲空間是按簇進行劃分和管理的,簇是空間分配和回收的基本單位,即,一個文件總是佔用若干個整簇,文件所使用的最後一簇剩餘的空間就不再使用,而是浪費掉了。
從統計學上講,平均每個文件浪費0.5簇的空間,簇越大,存儲文件時空間浪費越多,利用率越低。因此,簇的大小決定了該盤數據區的利用率。FAT16系統簇號用16位二進制數表示,從0002H到FFEFH個可用簇號(FFF0H到FFFFH另有定義,用來表示壞簇,文件結束簇等),允許每一邏輯盤的數據區最多不超過FFEDH(65518)個簇。FAT32系統簇號改用32位二進制數表示,大致從00000002H到FFFFFEFFH個可用簇號。FAT表按順序依次記錄了該盤各簇的使用情況,是一種位示圖法。
每簇的使用情況用32位二進制填寫,未被分配的簇相應位置寫零;壞簇相應位置填入特定值;已分配的簇相應位置填入非零值,具體為:如果該簇是文件的最後一簇,填入的值為FFFFFF0FH,如果該簇不是文件的最後一簇,填入的值為該文件佔用的下一個簇的簇號,這樣,正好將文件佔用的各簇構成一個簇鏈,保存在FAT表中。0000000H、00000001H兩簇號不使用,其對應的兩個DWORD位置(FAT表開頭的8個位元組)用來存放該盤介質類型編號。FAT表的大小就由該邏輯盤數據區共有多少簇所決定,取整數個扇區。

(四)FAT32系統一簇對應8個邏輯相鄰的扇區,理論上,這種用法所能管理的邏輯盤容量上限為16TB(16384GB),容量大於16TB時,可以用一簇對應16個扇區,依此類推。FAT16系統在邏輯盤容量介於128MB到256MB時,一簇對應8個扇區,容量介於256MB到512MB時,一簇對應16個扇區,容量介於512MB到1GB時,一簇對應32個扇區,容量介於1GB到2GB時,一簇對應32個扇區,超出2GB的部分無法使用。顯然,對於容量大於512MB的邏輯盤,採用FAT32的簇比採用FAT16的簇小很多,大大減少了空間的浪費。
但是,對於容量小於512MB的盤,採用FAT32雖然一簇8個扇區,比使用FAT16一簇16個扇區,簇有所減小,但FAT32的FAT表較大,佔用空間較多,總數據區被減少,兩者相抵,實際並不能增加有效存儲空間,所以微軟建議對小於512M的邏輯盤不使用FAT32。
另外,對於使用FAT16文件系統的用戶提一建議,硬碟分區時,不要將分區(邏輯盤)容量正好設為某一區間的下限,例:將一邏輯盤容量設為1100M(稍大於1024M),則使用時其有效存儲容量比分區為950M的一般還少,因其簇大一倍,浪費的空間較多。還有,使用FDISK等對分區指定容量時,由於對1MB的定義不一樣(標準的二進制的1MB為1048576B,有的系統將1MB理解為1000000B,1000KB等),及每個分區需從新磁軌開始等因素,實際分配的容量可能稍大於指定的容量,亦需注意掌握。

(五)根目錄區(ROOT區)不再是固定區域、固定大小,可看作是數據區的一部分。因為根目錄已改為根目錄文件,採用與子目錄文件相同的管理方式,一般情況下從第二簇開始使用,大小視需要增加,因此根目錄下的文件數目不再受最多512的限制。FAT16文件系統的根目錄區(ROOT區)是固定區域、固定大小的,是從FAT區之後緊接著的32個扇區,最多保存512個目錄項,作為系統區的一部分。

(六)目錄區中的目錄項變化較多,一個目錄項仍佔32位元組,可以是文件目錄項、子目錄項、卷標項(僅跟目錄有)、已刪除目錄項、長文件名目錄項等。目錄項中原來在DOS下保留未用的10個位元組都有了新的定義,全部32位元組的定義如下:
(1) 0-- 7位元組 文件正名。
(2) 8--10位元組 文件擴展名。
(3) 11位元組 文件屬性,按二進制位定義,最高兩位保留未用,0至5位分別是只讀位、隱藏位、系統位、卷標位、子目錄位、歸檔位。
(4) 11--13位元組 僅長文件名目錄項用,用來存儲其對應的短文件名目錄項的文件名位元組校驗和等。
(5) 13--15位元組 24位二進制的文件建立時間,其中的高5位為小時,次6位為分鍾。
(6) 16--17位元組 16位二進制的文件建立日期,其中的高7位為相對於1980年的年份值,次4位為月份,後5位為月內日期。
(7) 18--19位元組 16位二進制的文件最新訪問日期,定義同(6)。
(8) 20--21位元組 起始簇號的高16位。
(9) 22--23位元組 16位二進制的文件最新修改時間,其中的高5位為小時,次6位為分鍾,後5位的二倍為秒數。
(10)24--25位元組 16位二進制的文件最新修改日期,定義同(6)。
(11)26--27位元組 起始簇號的低16位。
(12)28--31位元組 32位的文件位元組長度。

其中第(4)至(8)項為以後陸續定義的。 對於子目錄項,其(12)為零;已刪除目錄項的首位元組值為E5H。在可以使用長文件名的FAT32系統中,文件目錄項保存該文件的短文件名,長文件名用若干個長文件名目錄項保存,長文件名目錄項倒序排在文件短目錄項前面,全部是採用雙位元組內碼保存的,每一項最多保存十三個字元內碼,首位元組指明是長文件名的第幾項,11位元組一般為0FH,12位元組指明類型,13位元組為校驗和,26--27位元組為零。

(七)以前版本的 Windows 和DOS與 FAT32 不兼容,不能識別FAT32分區,有些程序也依賴於 FAT16 文件系統,不能和 FAT32 驅動器一道工作。將硬碟轉換為 FAT32,就不能再用雙引導運行以前版本的 Windows(Windows 95 [Version 4.00.950]、Windows NT 3.x、Windows NT 4.0 和 Windows 3.x)。

『伍』 U盤文件系統FAT32是什麼意思

意思是U盤支持的文件存儲格式是FAT32。

文件系統用於明確存儲設備或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。操作系統中負責管理和存儲文件信息的軟體機構。

文件系統由三部分組成:文件系統的介面,對對象操縱和管理的軟體集合,對象及屬性。從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲並對存入的文件進行保護和檢索的系統。

FAT32是從FAT和FAT16發展而來的,優點是穩定性和兼容性好,能充分兼容Win 9X及以前版本,且維護方便。缺點是安全性差,且最大隻能支持32GB分區,單個文件也只能支持最大4GB。


(5)fat32文件系統源碼擴展閱讀

對於使用FAT32文件系統的每個邏輯盤內部空間又可劃分為三部分,依次是引導區(BOOT區)、文件分配表區(FAT區)、數據區(DATA區)。

引導區和文件分配表區又合稱為系統區,占據整個邏輯盤前端很小的空間,存放有關管理信息。數據區才是邏輯盤用來存放文件內容的區域,該區域以簇為分配單位來使用。

FAT32文件系統的第一個扇區就是引導扇區,其內存放了一個文件系統的很多具體信息,例如FAT表個數、每個FAT表的大小(扇區數目)、每扇區內的位元組數目、每簇中所包含的扇區數目、被保留的扇區數目、文件系統大小(扇區數目)、根目錄的起始簇號及一些其它的附加信息。

引導區(BOOT區)從第一扇區(邏輯扇區號0)開始使用了三個扇區,保存了該邏輯盤每扇區位元組數,每簇對應的扇區數等等重要參數和引導記錄。之後還留有若干保留扇區,其中有一至三扇區的備份。

『陸』 sd卡上的FAT32文件系統,我有驅動源碼,初始化,讀寫都實現了,怎麼實現刪除所有文件呢

網上去下載什麼U盤量產工具軟體啊什麼的應該能實現,搜一下

『柒』 文件系統fat32是什麼意思是什麼格式

FAT32的格式最常見的是在U盤的使用上,因為他最大存儲數據容量不能超過3.99G,如果文件大於3.99G就不能使用FAT32格式的盤符,而需要NTFS格式後的盤,解釋完畢,帶走,不謝

『捌』 如何用C語言實現fat32文件系統

#include <stdio.h>
#include <stdlib.h> //為了使用exit()
int main()
{
char ch;
FILE* fp;
char fname[50]; //用於存放文件名
printf("輸入文件名:");
scanf("%s",fname);
fp=fopen(fname,"r"); //只供讀取
if(fp==NULL) //如果失敗了
{
printf("錯誤!");
exit(1); //中止程序
}
//getc()用於在打開文件中獲取一個字元
while((ch=getc(fp))!=EOF)
putchar(ch);
fclose(fp); //關閉文件
return 0;
}
注意!初學者往往會犯一個錯誤,即在輸入文件名時不加後綴名,請注意加上!
程序示例2[2]
#include <stdio.h>
FILE *stream, *stream2;
int main( void )
{
int numclosed;
// Open for read (will fail if file "crt_fopen.c" does not exist)
if( (stream = fopen( "crt_fopen.c", "r" )) == NULL ) // C4996
// Note: fopen is deprecated; consider using fopen_s instead
printf( "The file 'crt_fopen.c' was not opened\n" );
else
printf( "The file 'crt_fopen.c' was opened\n" );
// Open for write
if( (stream2 = fopen( "data2", "w+" )) == NULL ) // C4996
printf( "The file 'data2' was not opened\n" );
else
printf( "The file 'data2' was opened\n" );
// Close stream if it is not NULL
if( stream)
{
if ( fclose( stream ) )
{
printf( "The file 'crt_fopen.c' was not closed\n" );
}
}
// All other files are closed:
numclosed = _fcloseall( );
printf( "Number of files closed by _fcloseall: %u\n", numclosed );
}

『玖』 如何實現fat32文件系統 要代碼和原理

---------先了解FAT/FAT16/FAT32--------- 在推出FAT32文件系統之前,通常PC機使用的文件系統是FAT16。像基於MS-DOS,Win 95等系統都採用了FAT16文件系統。在Win 9X下,FAT16支持的分區最大為2GB。我們知道計算機將信息保存在硬碟上稱為「簇」的區域內。使用的簇越小,保存信息的效率就越高。在FAT16的情況下,分區越大簇就相應的要增大,存儲效率就越低,勢必造成存儲空間的浪費。並且隨著計算機硬體和應用的不斷提高,FAT16文件系統已不能很好地適應系統的要求。在這種情況下,推出了增強的文件系統FAT32。同FAT16相比,FAT32主要具有以下特點: 1. 同FAT16相比FAT32最大的優點是可以支持的磁碟大小達到2TB(2047GB),但是不能支持小於512MB的分區。基於FAT32的Win 2000可以支持分區最大為32GB;而基於 FAT16的Win 2000支持的分區最大為4GB。 2. 由於採用了更小的簇,FAT32文件系統可以更有效率地保存信息。如兩個分區大小都為2GB,一個分區採用了FAT16文件系統,另一個分區採用了FAT32文件系統。採用FAT16的分區的簇大小為32KB,而FAT32分區的簇只有4KB的大小。這樣FAT32就比FAT16的存儲效率要高很多,通常情況下可以提高15%。 3. FAT32文件系統可以重新定位根目錄和使用FAT的備份副本。另外FAT32分區的啟動記錄被包含在一個含有關鍵數據的結構中,減少了計算機系統崩潰的可能性。 ◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎ NTFS 和 FAT32 分區的區別到底是啥呢??? http://www.inbase.org/home/printpage.asp?ArticleID=583 當然了NTFS 和 FAT32 都是目前比較流行的磁碟分區格式,由FAT到FAT16----FAT32---NTFS,NTFS功能強一些。 1. NTFS 支持文件加密和分別管理功能(也就是著名的EFS加密格式),可為用戶提供更高層次的安全保證。 2. NTFS 具有更好的磁碟壓縮性能,可進一步滿足小硬碟用戶的需要(讀取會慢一些)。 3. NTFS 最大支持高達 2TB (1TB=1024GB)的大硬碟,而且它的性能不會隨著磁碟容量的增大而降低。 由此可見,NTFS 格式具有許多獨特的優點 不過,呵呵,它也有一個缺點,那就是該磁碟文件格式不能被除它自己之外的其他操作系統所識別(NT 4.0也不例外),這就對數據交流造成了一定的影響,也就不支持DOS操作系統了,不過還是值得支持。 所以呀....只使用 Windows 2000 的用戶應首選使用 NTFS 格式,要是同時使用 Windows 2000 和其他操作系統,則應謹慎從事。最好將磁碟劃分為多個不同的磁碟分區,將 Windows 2000 安裝到其中的一個磁碟分區並選擇使用 NTFS 格式;將其他操作系統安裝到另外的磁碟分區中並使用 FAT 或 FAT32 格式。

『拾』 單片機讀取FAT32文件系統裡面的資料

呵呵,以前用單片機讀寫過SD卡。
雖然看過一些關於FAT32文件系統的參考資料,都是半文半白的,碰到關鍵的地方就岔開了。
其實,這點東西,還真是簡單。
你可以用WINDOWS XP,格式化SD卡,寫入幾個小文件(TXT),文件內容你是已知的。
然後用單片機全面的讀出,通過串口,全部由串口助手接收,存檔仔細分析。
再用XP刪除一些文件,再寫入一些,再讀出分析。
用不了幾個回合,就都搞清楚了。

熱點內容
游戲高配主機哪個配置好 發布:2024-11-09 03:17:09 瀏覽:133
伺服器跟個人電腦主機 發布:2024-11-09 03:17:01 瀏覽:679
c語言練習網站 發布:2024-11-09 03:16:26 瀏覽:459
安卓下載哪個版本有看頭 發布:2024-11-09 03:07:51 瀏覽:541
資料庫存儲引擎 發布:2024-11-09 03:04:32 瀏覽:546
手機版我的世界伺服器一鍵生成主城 發布:2024-11-09 02:38:24 瀏覽:842
linuxmysql數據備份 發布:2024-11-09 02:36:56 瀏覽:563
linux文件處理 發布:2024-11-09 02:13:39 瀏覽:173
maveneclipse源碼 發布:2024-11-09 02:03:31 瀏覽:652
python對齊列印 發布:2024-11-09 01:46:07 瀏覽:175