FAT16和FAT32目录结构分析

时间:2024-06-02 15:56:10

一、前言

FAT16和FAT32从原理上看是同一类技术,放在一起分析,有助于了解其细节差异;

先回归一下FAT16、FAT32 分区的大致结构如下:

FAT16和FAT32目录结构分析

从分区结构上看,FAT16和FAT32目录结构比较不一样的地方在于:

FAT16 多了一个根目录区,根目录区由FDT目标表项组成,每一个分区表项占32字节;由于根目录区大小在格式化的时候就固定下来了,所以根目录下的文件夹和文件的个数是固定了,取决于DBR中根目录项个数的配置,最多只能是512个

那么子目录存放在哪里?    存放在数据区中

FAT32的根目录存放在哪里? 一般在数据区的起始簇中;

那目录项呢?  请看接下来描述

 

二、FAT16的目录项

FAT 文件系统的一个重要思想是把目录(文件夹)当作一个特殊的文件来处理。

2.1 目录项分类

  • 短文件名目录项
  • 长文件名目录项
  • “.”目录项和
  • “..”目录项
  • 卷标目录项

说明: 虽然根目录不同于其他目录或文件,但根目录组织形式和普通的目录(文件夹)并没有不同。

系统以32字节为单位分配给目录项的,最基本的描述如下:

FAT16和FAT32目录结构分析

0x0~0x7 定义的8字节为文件名, 只有八个字节? 我们平时一个文件通常可不止这么长。

答: 早期的FAT16 系统并没有长文件名一说,Windows操作系统已经完全支持在FAT16 上的长文件名了。关于对长文件名的支持;

 长文件名的支持:

如果文件名超过8字节,系统根据文件名的长度,分配多个32字节的目录项用于保存长文件名,格式如下(图片来源网络):

FAT16和FAT32目录结构分析

 为了兼容DOS与Winddows 3.x在Winddows 95以上的系统中,超过8.3格式的文件或目录实际存储着两个名字,一个短文件名和一个长文件名。当创建一个长文件名时,其对应的短文件名的处理有以下三个原则:

A:系统取长文件名的前6个字符加上“~1”,形成短文件名,其扩展名保持不变

B:如果已经存在这个名字的文件,数字自动加1,“~2”

C:如果有DOS与Winddows 3.x的非法字符,以“­_”替代。

例如,一个长文件名为 child_12345678abcd.txt, 实际存放如下(图片来源网络,由高地址往低地址):

FAT16和FAT32目录结构分析

 

".",".."目录:

在子目录所在的文件目录项区域中,总有两个特殊的目录,“.”目录项和“..”目录项可以用DOS命令的DIR查看到。

说明

A:“.”目录项所描述的起始簇号,是子目录本身所在簇号,

B:“..”目录项所描述的起始簇号,是上一级目录的起始簇号,如果上级目录为根目录,则起始簇号被设置为0.

C:这两个目录都大小被设置0,同其他的文件夹目录项一样。

系统利用“.”目录项(当前目录)和“..”目录项实现目录之间的双向联系,从而把整个文件系统联系在一起。

 

卷标目录项

         卷标可以被随时修改,存放在FDT中,

A:卷标属于短文件名,最大支持11个字符。

B:不记录起始簇号与大小

C:不记录创建时间和最后访问时间,只记录修改时间

 

三、删除文件或目录


(i)短文件名的占的目录项第1个字节被改写成E5H。
(ii)长文件名占的目录项第1个字节也被改写成E5H。
(iii)子目录的中的文件:短文件名和长文件名的第1字节被改写为E5。
(iv)子目录的中的文件的起始簇号的高2字节也被清0,此时此刻,子目录也不容易恢复。