高手快来救命!关于FAT32文件系统根目录的问题

jeffrey_nupt 2007-04-04 02:43:18
FAT32文件系统中的根目录(FDT)是不连续的,在实际U盘的容量比较小的时候,例如,32M,64M的时候,它一般第2簇的时候放根目录,第3簇就开始存内容(这样也就是1簇就是1个扇区),当第2簇存满的时候,它会在磁盘中另外开辟空间,继续存放根目录,现在最主要的问题是如何计算得到它另外开辟的空间的地址……

谢谢大家……我研究了很久,还是没有答案,谁可以教教我的?

跪求大家教教我。
...全文
1038 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
GGYYBOY 2007-04-06
  • 打赏
  • 举报
回复
gz
liuyaoyou 2007-04-05
  • 打赏
  • 举报
回复
道理上讲下一个簇的地址是不用计算的,这个簇保存的地址就应该是下一个簇的地址。
liuyaoyou 2007-04-05
  • 打赏
  • 举报
回复
DIR区:
DIR(Directory)是根目录区,紧接着第二FAT表(即备份的FAT表)之后,记录着根目录下每个文件(目录)的起始单元,文件的属性等。定位文件位置时,操作系统根据DIR中的起始单元,结合FAT表就可以知道文件在硬盘中的具体位置和大小了。

数据(DATA)区:
数据区是真正意义上的数据存储的地方,位于DIR区之后,占据硬盘上的大部分数据空间。

目录项的格式
字节偏移 意义 占字节数
00H 文件名 8B
08H 扩展名 3B
0BH 文件属性 1B
0CH 保留 10B
16H 时间 2B
18H 日期 2B
1AH 开始簇号 2B
1CH 文件长度 4B

FAT结构含义
FAT12 FAT16 意义
000H 0000H 可用
FF0H-FF6H FFF0H-FFF6H 保留
FF7H FFF7H 坏
FF8H-FFFH FFF8H-FFFFH 文件最后一个簇
×××H ××××H 文件下一个簇
liuyaoyou 2007-04-05
  • 打赏
  • 举报
回复
根目录区(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;
jeffrey_nupt 2007-04-04
  • 打赏
  • 举报
回复
快来人啊……高手快来啊……
碧螺春的马甲 2007-04-04
  • 打赏
  • 举报
回复
这个 小于 32M的建议用 FAT16

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧