【问题标题】:FAT16 directoriesFAT16 目录
【发布时间】:2012-09-21 15:35:48
【问题描述】:

我正在开发一个在资源受限的微控制器上使用 FAT16 文件系统结构的低级应用程序,这需要我编写自己的自定义访问代码。我已经研究过使用 Petit FAT 和 FatFS 之类的库,但不幸的是,我认为这两种库都不适合我的需求。不过,它们已成为 FAT 工作原理的有用参考。

我仍然遇到问题的一个领域是子目录条目。

根据this,一个目录条目可以指向1个起始簇。对于数据文件,这只是第一个数据簇。对于目录,这是子目录的起始簇(可能是另一个目录条目)。

如果从根目录到基本文件只有 1 个目录路径,这很好用,但我不明白这如何允许您分支到任何给定目录下的多个文件/目录。

例如。目录结构:

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

根据我对FAT16结构的理解,

紧跟在 FAT 后面的是第一个根目录条目的簇,其中包含 root dir 1 的信息。然后第一个集群字段将包含sub dir 1 的集群地址,他的第一个集群字段将包含file 1 的集群地址,他的第一个集群指向一个数据集群。

然后,第二个根目录条目将在包含root dir 2 信息的 FAT 末尾之后的第二个簇开始。它的第一个簇将指向sub dir 3 的簇,而sub dir 3 的第一个簇将指向一个空簇(如 FAT 中标记的那样)。

我在这里缺少什么?我想不出一种从根目录条目向下导航到 sub dir 2 的方法。

【问题讨论】:

  • 我认为您可能会将“根目录”与一般的“目录”混淆。看这里:en.wikipedia.org/wiki/File_Allocation_Table
  • 我认为你是对的,根目录会指向 A:0: 等,并且有一个指向 root dir 1 的子条目(正确?如果是这样,我会更新我的问题)。但是,我不确定这如何解决单个目录中的多个目录/文件的问题。

标签: microcontroller directory-structure fat16


【解决方案1】:

首先,为了消除混淆,一个目录条目不占用单个簇。正如您从源代码中看到的,单个目录条目只有 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 的目录条目表。

【讨论】:

    猜你喜欢
    • 2012-11-21
    • 2017-04-10
    • 2013-05-24
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 2017-06-05
    相关资源
    最近更新 更多