IT袋

当前位置:主页 > 经验教程 > 系统教程 >

U盘文件系统fat32打不来怎么办

U盘文件系统fat32打不来怎么办 详解u盘写入保护解除方法(3)

时间:2023-11-25 12:07:37 来源:IT袋 作者:苏晓敏
导读:U盘文件系统fat32打不来怎么办,FAT 表的内容如下图所示: 上图就是一个实际的 FAT 表。前 8 个字节“F8 FF FF 0F FF FF FF FF”为FAT32 的 FAT 表头标记,用以表示此处是 FAT 表的开始。后面的数

U盘文件系统fat32打不来怎么办

FAT 表的内容如下图所示:

U盘文件系统fat32打不来怎么办

上图就是一个实际的 FAT 表。前 8 个字节“F8 FF FF 0F FF FF FF FF”为FAT32 的 FAT 表头标记,用以表示此处是 FAT 表的开始。后面的数据每四个字节为一个簇项(从第 2 簇开始) ,用以标记此簇的下一个簇号。

上面讲了很多, 都是围绕簇这样一个词来讲的, 簇又是什么?为什么要将它引入到 FAT32 里来呢?磁盘上最小可寻址存储单元称为扇区, 通常每个扇区为 512 个字节。 由于多数文件比扇区大得多, 因此如果对一个文件分配最小的存储空间, 将使存储器能存储更多数据,这个最小存储空间即称为簇。根据存储设备(磁盘、闪卡和硬盘)的容量,簇的大小可以不同以使存储空间得到最有效的应用。在早期的 360KB 磁盘上,簇大小为 2 个扇区(1,024 字节);第一批的 10MB 硬盘的簇大小增加到8个扇区(4,096字节); 现在的小型闪存设备上的典型簇大小是8KB或 16KB。2GB 以上的硬盘驱动器有 32KB 的簇。如果对于容量大的存储定义了比较小的簇的话,就会使 FAT 表的体积很大,从而造成数据的冗余和效率的下降。

需要指出的是,簇作为 FAT32 进行数据存储的最小单位,内部扇区是不能进一步细分的, 即使一个文件的数据写到一个簇中后, 簇中还有容量的剩余(里部扇区没有写满) ,哪怕这个簇只写了一个字节,其它文件的数据也是不能接在后面继续数据的,而只能另外找没有被占用的簇。

那么 FAT 表有多大呢?FAT 表中每四个字节表示一个簇,所以 FAT 表的大小由实际的簇数来决定。从这里也可以看出,如果簇过大,则 FAT 表比较小,但会造成空间的浪费,而如果簇过小,可以减小空间的浪费,但会使FAT 表变得臃肿。FAT 表的大小可以从 BPB 参数 BPB_FATSz32读出。

现在知道了FAT表的地址和FAT表的大小,也知道有两个FAT表就可以计算出第一个文件夹也就是根文件夹的位置,他的位置就在FAT表的正后方,计算方法如下:

FirstDirSector = FirstFATSector + BPB_NumFATs[0] * FATsectors 

其中FirstFATSector 表示FAT表的位置, BPB_NumFATs[0] 表示FAT表的数量,FATsectors 表示的是FAT表占用的扇区数量。其实根目录所在的簇就是第2号簇。计算出了根文件夹的位置就可以从根文件夹中读取数据。在 FAT32 中其实已经把文件的概念进行扩展,目录同样也是文件,根目录的地位与其它目录是相同的, 因此根目录也被看作是文件。 既然是文件就会有文件名,根目录的名称就是磁盘的卷标。

下面所以说根目录文件的内容。首先目录也是文件,它可以看做是特殊文件,这个文件使用来存放其他文件或目录的信息,例如文件名、扩展名、属性、创建时间、最后修改时间、文件起始簇号、文件长度等等。所以我要读取一个文件信息的时候首先要做的就是从目录中读取文件的信息数据。根据上面说的我们已经获取到了根目录的地址,那么就可以从根目录中读取根目录下的文件信息。每个文件/目录在目录文件中使用32个字节的数据表示,具体字段如下所示:

相关阅读