实际上,FAT 文件系统有很好的文档记录。Microsoft 的官方 FAT 文档可以通过文件名fatgen103找到。
目录条目LOREMI~1.TXT
可以在根目录中找到,并且以长文件名条目(xt
, lorem ipsum.t
→ lorem ipsum.txt
)开头,目录条目记录在《FAT 目录结构》一章中;如果是 FAT16,您对第 26 到第 28 个字节感兴趣以获取簇地址( DIR_FstClusLo
),即(小端序!)0x0294
(或 660₁₀)。
根据您提供的 BPB 标头信息,我们可以像这样计算数据扇区:
data_sector = (cluster-2) * sectors_per_cluster +
(reserved_sectors + (number_of_fats * fat_size) +
first_data_sector)
为什么cluster-2
?因为 FAT 文件系统中的前两个簇总是为 BPB 头块以及 FAT 本身保留,请参阅fatgen103.doc
.
为了让我们解决这个问题,我们仍然需要确定根目录条目的扇区跨度。对于 FAT12/16,可以这样确定:
first_data_sector = ((root_entries * directory_entry_size) +
(bytes_per_sector - 1)) // bytes_per_sector
根据规范,目录条目大小始终为 32 字节(请参见 中的 «FAT 目录结构» 一章fatgen103.doc
),现在已知所有其他值:
first_data_sector = ((512*32)+(512-1)) // 512 → 32
data_sector = (660-2)*64+(6+(2*233)+32) → 42616