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的目录条目表。