C/C++ 如何实现文件在FAT32文件系统中的绝对定位

 关于文件在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.中文编码问题

 

如何读者有什么疑问,请给我留言,一定回答。

你可能感兴趣的:(数据结构,C++,c,qq,C#)