关于文件在FAT32磁盘扇区中的绝对定位 首先我们应该了解FAT32的基本结构(树形结构) 我们首先要明白
FAT32文件系统DBR(引导扇区),FAT,FDT,DATA这四个基本结构:
1.DBR:DBR记录了当前FAT32 磁盘的一些基本信息,在通常情况下,DBR位于磁盘分区的0号逻辑扇区 在附件中有幅
DBR的图形信息,里面详细说明了在DBR中我们能获取到哪些主要信息,当然,还有很多信息希望读者自己去查阅详
相关资料,我们首先需要获取到DBR中的一些详细信息才能进一步定位文件。
2 FDT:FDT区简单的说就是记录的目录(文件夹)的信息,里面记录了当前目录下所有的文件(包括当前目录下的文件
夹名)的信息,说通俗一点就是记录了当前目录下的所有文件的文件名,我们定位文件,必须要定位到该文件所在目
录的FDT区的位置。
3 FAT:FAT区在FAT32文件系统中有2个:FAT1与FAT2,FAT2是FAT1的备份,所以我们只需要获取FAT1的位置,FAT区
所在的扇区号我们可以由DBR获取,那FAT区究竟是什么呢?首先,我们知道磁盘是由扇区组成的,若干的扇区组成一
簇,当一个目录的FDT区需要占据多个簇的时候,FAT区记录了多个簇的连接信息,具体可以详细去查阅有关资料。
4 DATA:DATA区是由FDT区定位的,上面说过FDT区记录了某个目录下文件的信息,若这个信息记录的是文件而非文件
夹(目录),则这个信息的一部分记录了这个文件的DATA区的位置,顾名思义,DATA区储存了文件的内容,当一个
簇无法记录一个完整的文件内容时,就要用到FAT区进行簇连。
下面我将详细介绍如何用C/C++实现指定文件在FAT32文件系统中的绝对定位:
定位文件所在的DATA区,必须读取扇区。C/C++中 我们使用windows.h提供的CreateFile,CreateFile2个函数实现
读取扇区,函数的使用方法请查阅详相关资料。
下面我们举个例子 假设我要定位 C:\a\b\c.txt 这个文件
1.读取0号扇区DBR,获取详关信息,具体我们需要得到:1根目录FDT区的首簇号 2每簇所拥有的扇区数 3FAT区的首扇区号
4保留扇区号 5FAT区的长度 6FAT区数
2.我们获取了根目录FDT区的首簇号,根据公式:首扇区号=保留扇区+FAT区数*AT区的长度+(当前簇号-2)*每簇所拥
有的扇区数 这个公式 计算出首扇区 根据上面FDT区的介绍 我们知道根目录的FDT区一定记录了a这个目录的信息,那
我们逐个扇区读取并扫描(注意簇连)获得了b这个目录的目录信息,然后分析信息,得到b这个目录的FDT区。
3.同上,在b的FDT区中,我们获取了c.txt这个文件的信息,并由获取的信息得到了这个文件DATA区的扇区号,从而定位
成功。
FAT32文件系统就是一个树型结构 在定位文件中我们要注意:1.簇连问题
2.长文件名可能记录在2个扇区中,定位起来有点难度
3.中文编码问题
如何读者有什么疑问,请给我留言,一定回答。