1.根据BPB中的信息,计算FDT位置。
2.编写代码显示FDT,观察长文件名的显示格式,并记录目标文件的首簇号。
3.根据公式计算目标文件起始扇区位置。
4.读取文件在数据区扇区中的内容并记录。
这里分别实验了fat16和fat32:
Fat16:
根据bpb,每fat表占0f0字节,保留扇区为1,则fdt的起始扇区为1+0f0*2=1e1.
以上为fdt内容,个人觉得用l命令简单得多,上面的a代码还要涉及每磁道扇区数等等,下面用l实现相同的功能:
我用的fat16不支持长文件名,所以后面又用fat32重新做了一遍,这里也可以读取文件内容。如1e1(fdt)+20h+4=205h,即fdt起始扇区+fdt大小+(3-2)*每簇扇区数。文件首簇可以从目录项倒数第6字节和第5字节看到。
下面说fat32:
原理基本跟fat16类似:
这里需要说的是bpb肯定不一样,fat表项为4字节,我们现在主要目的是看长文件名,就不赘余了。
上面的是部分根目录项,其他的被我省了。这里看文件LIHUAN~1.TXT,创建长文件名时,也会创建个短文件名,前6字节+~1构成短文件名,另一个长文件名需要多个目录项时,其倒序排列在短文件名目录项之前。现在查找其内容:由于fat32把根目录放在数据区,故而文件位置在:20(保留扇区数)+2*0ff7(fat大小,在1024-1027)+(08b5-2)*8=65a6:
任务五:文件删除原理
1.显示FDT,记录已删除文件在FDT中所对应的状态信息的变化。
2.显示FAT,记录已删除文件在FAT中所对应的状态信息的变化。
3.查看已删除文件在数据区扇区中的内容。
4.根据以上结果,说明文件删除原理。
由以上几个图片可以看出:fat表里对应fat项清0,fdt对应目录项近把第一字节修改为e5,文件内容并不修改。所谓删除,即把fat表项删除,fdt标示e5表示曾被占用,现已删除。