如何检测FAT32数据区中的目录结尾?

Lou*_*ang 6 c filesystems directory fat32 fat

我正在使用磁盘文件.由于目录结构中目录的大小为0,我想知道如何检测磁盘上目录文件的结尾.

DIR_Name[0] == 0x00
Run Code Online (Sandbox Code Playgroud)

上面检测目录结尾的方法似乎不可靠.我在wiki上发现FAT32中根目录的大小固定为512个条目,但其他子目录呢.我可能需要使用FAT和群集号遍历目录.

kei*_*hmo 4

来自“fat32 on disk format”的第一个 Google 搜索结果,第 24 页:

创建目录时,在其 DIR_Attr 字段中设置了 ATTR_DIRECTORY 位的文件,将其 DIR_FileSize 设置为 0。在具有 ATTR_DIRECTORY 属性的文件上,不使用 DIR_FileSize,并且始终为 0(目录的大小通过简单地遵循其簇链来确定)至 EOC 标记)。

另外:FAT32根目录大小并不固定为512个条目;它的大小的确定方式与任何其他目录完全相同。

来自另一个可靠来源

阅读目录

读取目录的第一步是查找并读取根目录。在 FAT 12 或 FAT 16 卷上,根目录位于紧接文件分配表之后的固定位置:

first_root_dir_sector = first_data_sector - root_dir_sectors;

在FAT32中,根目录出现在给定簇的数据区域中,并且可以是簇链。

root_cluster_32 = extBS_32->root_cluster;

添加了强调。