FAT12中,如何定位大于一个扇区(512B)的文件内容

本文详细介绍了如何在FAT12文件系统中定位和读取大于512B的文件内容,包括如何确定文件所占簇的位置,并计算文件的实际大小。同时,还提供了制作FAT12文件系统及添加文件的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【0】README


【1】我们看到 temp.txt 所在 根目录区条目的初始簇号为 0003h=3;

这里写图片描述
我们转向 第3个 FAT项去看看 》》

【2】从下图 ,我们看到如下:

这里写图片描述

0000200: f0 ff ff 00 40 00 05 f0 ff 00 00 00 00 00 00 00
也即是是 0-ff0 1-fff 2-000 3-004 4-005 5-fff 

所以我们可以看到,fff表结束了,temp.txt 占用的扇区号为 3, 4, 5(相对于数据区而言),共计3个簇(扇区)
(Alert): 簇==1个还是多个扇区,这个是在 FAT12 引导扇区内定义好了的,要记死这些东西;
我们转向数据区看看 》》

【3】数据区部分截图:

这里写图片描述
这里写图片描述

【4】这里,我们不得不算一下 FAT12文件系统的各个结构的起始扇区了;

这里写图片描述

4. 每FAT扇区数==BPB_FATSz16=0009=offset(22) + length(2)

(纠错1) 非常抱歉,上图3.BPB_RootEntCnt=00e0=14 而不是15;

而 FAT12的结构图有:引导扇区、FAT1、FAT2、根目录区、数据区:
这里写图片描述
而由引导扇区内容,我们知道:

  • 引导扇区的扇区范围 = 0~0;
  • FAT1 的扇区范围 = 1~9;
  • FAT2 的扇区范围 = 10~18;
  • 根目录区的扇区范围 = 19~32;
  • 数据区的扇区范围 = 33~ending;
  • 又每个扇区=512B,所以数据区的偏移量为 (32+1)* 512 = 16896B,16896/16=1056行,所以数据区的开始字节数为:16896B 。
  • 出现的问题:而模块3中 文件存储的起始行为 1088 行,为什么?[ 1056行和1088行相差一个扇区而已 (1088-1056) * 16 = 512 ]
  • 具体原因:参见 { http://blog.youkuaiyun.com/pacosonswjtu/article/details/48403031 的“4.2.a.3)算数据区开始扇区号:”}

【5】验证的时刻到了

这里写图片描述
参见模块3中的 文件内容起始行1089 和 结束行1167;所以总大小为 (1167-1089 + 1) * 16 = 1264,
Bingo了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值