如何遍历FAT目录,文件

时间:2012-12-02 17:11:58

标签: filesystems fat fat16

我试图了解FAT文件系统的工作原理。从附加的FAT 16分区的第一个扇区我可以理解,

  1. 每个扇区的字节数= 512。
  2. 每个群组的行数= 4。
  3. FAT 16文件系统。
  4. reserved sectors = 4。
  5. FAT表计数= 2。
  6. 根目录中的条目数= 512。
  7. 行业总数= 204800。
  8. 根目录扇区= 32。
  9. FAT表的大小= 200。
  10. 第一个数据扇区= 436(4 + 2 * 200 + 32)。
  11. 群集数= 51091。
  12. First sector of FAT partition

    根目录位于第404个扇区(第0x32800个字节)

    Root directory

    附加地址为0x32800的根目录。根目录有两个名为a,b的文件夹和一个名为file.txt的文件。在上面的给定图像中,如何区分文件和文件夹。

    下列疑问: 1.文件夹条目应以0x2E开头,但没有这样的值。那么如何确定给定条目是文件还是文件夹? 2.如您所见,根目录中的每个条目占用64个字节(而不是32个字节)。每个文件和文件夹似乎有2个32byte条目。例如,文件夹“a”的条目为0x32800和0x32820(总共64字节)。 3.在这种情况下,值0x41表示什么?值0x41出现在0x32800,0x32820,0x32840,0x32880处。 0x32860和0x328A0的值与0x41不同。 4.地址0x32800(0x32800 + 0x1a = 0x3281a)的偏移量0x1A的值为0,地址0x32820(0x32820 + 0x1a = 0x3283a)的偏移量0x1A的值为3.哪个是与文件夹“a”对应的正确的簇号?

2 个答案:

答案 0 :(得分:3)

不,文件夹条目不以"开头。" (0x2E)除非是为了。和子目录的条目(这些不在根目录中)。如果dirent是目录,则dirent的属性字节设置为0x10位。

您还在查看具有长文件名的目录。原始FAT文件系统规范仅允许11个字符名称全部为大写并且在OEM代码页中。 Windows 95对此进行了扩展。在stackoverflow上解释它是如何工作的非常复杂。我建议查看有关LFN或长文件名的MSDN文档。

http://technet.microsoft.com/en-us/library/cc938438.aspx

答案 1 :(得分:0)

FAT **文件系统将所有文件保存为一个基本大小,除非文件大于该大小,然后重新调整大小以容纳整个文件

但这里的重点是FAT文件系统主要是好的,如果你有其他明智的磁盘空间我会建议使用NTFS文件系统,如果可能的话。您显示的图像看起来像软盘驱动器的注册表代码