高手快来救命!关于FAT32文件系统根目录的问题
FAT32文件系统中的根目录(FDT)是不连续的,在实际U盘的容量比较小的时候,例如,32M,64M的时候,它一般第2簇的时候放根目录,第3簇就开始存内容(这样也就是1簇就是1个扇区),当第2簇存满的时候,它会在磁盘中另外开辟空间,继续存放根目录,现在最主要的问题是如何计算得到它另外开辟的空间的地址……
谢谢大家……我研究了很久,还是没有答案,谁可以教教我的?
跪求大家教教我。
[解决办法]
根目录区(ROOT区)不再是固定区域、固定大小,可看作是数据区的一部分。因为根目录已改为根目录文件,采用与子目录文件相同的管理方式,一般情况下从第二簇开始使用,大小视需要增加,因此根目录下的文件数目不再受最多512的限制。FAT16文件系统的根目录区(ROOT区)是固定区域、固定大小的,是从FAT区之后紧接着的32个扇区,最多保存512个目录项,作为系统区的一部分。
FAT32将根目录也视作一个目录文件,使用一个簇链(Cluster Chain),RootDirStartClus正是这个链的起始簇号。FAT32有个专门放BIGFATBOOTFSINFO结构的扇区,该结构包含了剩余簇个数,下一个空闲簇号等信息。这个扇区通常紧接着引导扇区。
FAT32的BPB定义如下:
typedef struct
{
word BytesPerSector; //每扇区字节数
byte SectorsPerCluster; //每簇扇区数
word ReservedSectors; //保留扇区数
byte NumberOfFATs; //FAT的个数
word RootEntries; //根目录项数(FAT32不用)
word TotalSectors; //分区总扇区数(FAT32不用)
byte MediaDescriptor; //分区介质标识
word SectorsPerFAT; //每个FAT占的扇区数(FAT32不用)
word SectorsPerTrack; //每道扇区数
word Heads; //磁头数
dword HiddenSectors; //隐含扇区数
dword BigTotalSectors; //分区总扇区数
dword BigSectorsPerFat; //每个FAT占的扇区数
word ExtFlags; //扩展标志
word FS_Version; //文件系统版本
dword RootDirStartClus; //根目录起始簇号
word FSInfoSec; //指向包含BIGFATBOOTFSINFO结构的扇区
word BkUpBootSec; //后备引导区的位置
byte Reserved[12]; //备用
}BPB_FAT32;