2012-09-21 38 views
4

我正在研究在資源受限的微控制器上使用FAT16文件系統結構的低級應用程序,這需要我編寫我自己的自定義訪問代碼。我已經研究過使用像Petit FAT和FatFS這樣的庫,但不幸的是我不認爲這些將滿足我的需求。儘管如此,它們已經成爲FAT如何工作的有用參考。FAT16目錄

我仍然有麻煩的一個領域是子目錄條目。

根據this,目錄條目可以指向1個起始簇。對於數據文件,這只是第一個數據集羣。對於目錄,這是子目錄的起始簇(可能是另一個目錄條目)。

這工作得很好,如果有1只從根目錄目錄路徑下的基本文件,但我不明白這是如何讓你分支出來任何給定目錄下的多個文件/目錄。

ex。目錄結構:

- root dir 1 
    - sub dir 1 
     - file 1 
    - sub dir 2 
     - file 2 
- root dir 2 
    - sub dir 3 

根據我的FAT16結構的認識,

緊隨脂肪將是第一個根目錄條目包含信息root dir 1集羣。然後,第一個羣集字段將包含sub dir 1的羣集地址,第一個羣集字段將包含file 1的羣集地址,第一個羣集指向數據羣集。

然後第二個根目錄條目將在包含有關root dir 2的信息的FAT結束之後在第二個集羣處開始。其第一個羣集將指向sub dir 3的羣集,該羣集的第一個羣集將指向一個空羣集(如在FAT中標記的)。

我在這裏錯過了什麼?我無法找出一種方法來從根目錄條目導航到sub dir 2

+1

我想你可能會混淆「根目錄」與「目錄」一般。看看這裏:http://en.wikipedia.org/wiki/File_Allocation_Table – paulsm4

+0

我認爲你是對的,根目錄指向類似'A:',或'0:'等的東西,指向'root dir 1'的條目(正確?如果是的話,我會更新我的問題)。但是,我不確定這是如何解決多個目錄/文件在單個目錄中的問題。 – helloworld922

回答

3

首先要明確的困惑,一個目錄條目不佔用一個集羣。從源代碼可以看出,單個目錄項只有32個字節,其中簇的大小可以是4KB到64KB之間的大小,取決於您使用的FAT大小/版本。那麼,FAT實際上是目錄條目的

對於子目錄,你可以找到它的目錄條目表的父目錄項的起始簇。它們不一定要打包到磁盤的開頭。

爲了進一步說明,讓我們來看看你原來的例子略加修改的版本:

\ (root) 
    - dir 1 
     - sub dir 1 
      - file 1 
     - sub dir 2 
      - file 2 
    - dir 2 
     - sub dir 3 

要遍歷到sub dir 2

  1. 找到根目錄條目表,其中包含集羣中在FAT之後;
  2. 從根目錄條目表中查找條目dir 1,並獲取其起始簇;
  3. 從上面獲得的集羣中加載dir 1的目錄條目表;
  4. 查找條目sub dir 2並獲取其起始簇;
  5. 加載上面獲得的集羣;

然後,您現在應該有sub dir 2的目錄條目表。