查查文件的身份证
文件项
我们在资源管理器中只能看到两种东西——文件和目录。
文件当然有内容,但是文件名、文件大小、创建和修改时间也是存在文件里面吗?虽然现实上不是这样,不过理论上确实可行。只要全世界的文件系统设计者都遵循一套把元数据和内容放在一起的标准方法,那么一个文件无论拷贝到什么文件系统下,都是可以使用的。
但是如果真这么干,也会有一些麻烦。我能想到的,除了统一全世界标准这件难事以外,还有文件系统的灵活性会受到限制。因为文件系统可以根据使用场景来设计或改造,有的使用场景需要很少的元数据,遵循标准就会浪费空间,有的则需要很多,标准不能满足需求。
现实上,文件内容和元数据是分开管理的,文件系统的互相不兼容仅体现在元数据上,原因就是不同文件系统的设计需求不同,重要的是,文件的内容在任何文件系统上都是一致的。
文件项是FAT32自己定义的概念,这个概念包含了FAT32关于元数据的数据结构和存储方式。存储方式就是一个短文件项占32B,这里面就包含了FAT32所支持的关于一个文件的所有元数据,每个字节是什么意思,就是它的数据结构了。长文件项占n32B,这个n根据文件名长短而定,每多13个字符,就要多一个32B,多出来的n-1个32B,就是为了存名字,其他元数据也都在地址最高的那个32B里面(例0x10040C0),这个除了名字是截断的,其他内容的含义和短文件项是一样的。
文件的文件项
位于0x1004020的文件项是一个文件的文件项,看右侧名字可以知道,它就是我们之前在根目录创建的名为abcde.txt
的一个文件。一般来说,对于一个文件,我们最关心的就是文件的内容是什么,有多少内容?
对于这个文件,蓝线标记内容已经告诉我们
- 0A 00 00 00
文件的大小是0xA字节(此处有误,应为12字节,后文会发现,实验过程不严谨所致) - 00 00...03 00
文件的起始簇号是3
对,后面两个字节是低字节,前面两个是高字节
有上述信息可以得出以下结论
- 文件内容从3号簇开始,占用10B
- FAT32文件系统中,文件最大不超过4GB,因为大小用32位表示,最大值就是4G-1,再大就无法表示了。
3号簇在哪?