- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
读取FAT16文件 读取文件的流程:1. 读物理扇区0,得到引导扇区(逻辑扇区0)的 偏移地址。2. 读引导扇区的内容,得到文件系统基本配置信 息。3. 根据文件系统的基本配置信息计算FAT,FDT, 及数据簇的起始地址。4. 根据要读的文件名搜索FDT(根目录),找到要读文件的 起始数据簇号及文件大小。5. 根据文件的起始数据簇号在FAT表中查找所有该文件占 用的数据簇号,根据数据簇号查找相应的数据簇。 6. 查找下一个数据簇号读取相应数据簇,直到读出最后 一个数据簇0xFFFF。 我这里就有一张SD卡(容量为1G的),插上电脑后格式化为FAT格式,然后再往里面放一些文件! 在电脑上装上一个叫WinHex的软件,利用其打开磁盘的工具,就可以在物理层面上打开这张SD卡。 读物理扇区0(也即MBR),得到引导扇区(逻辑扇区0)(DBR)的偏移地址。先读取SD卡的第一个扇区(512字节),即扇区0,该扇区的数据如下图所示: 正常的话,该扇区最后两个字节如上图所示为 55 AA,如果不是则证明是读错了,或者该SD没有被格式化. 该扇区有两个重要信息:一、在0x1ca开始的四个字节03 07 1E 00,即 0x1E0703=1967875,代表该SD卡有1967875个 扇区,而每个扇区有512字节,所以该SD卡容量为 1967875*512/1024/1024=960.8MByte 二、在0x1C6开始的四个字节FD 00 00 00,即0xFD=253,它表示引导扇区在扇区253. 到此,这个扇区0就可以不用管了。 读取引导扇区(DBR) 以下是扇区253前64Byte的内容。因为 253*512=0x01FA00,所以可以知道下图 左边的偏移地址为:0x0001FA00 首先第0x3到0xA的内容为ASCII码的“MSDOS5.0”,记录了系统的版本,这个我们不用管。 以下才是我们需要了解的叫做BPB内容:第0xb开始的两个字节00 02,即0x2000=512,代表每个扇区(sector)有512个字节(byte)接下来的20代表每个簇(cluster)有32个扇区接下来的06 00 即0x6代表有6-1个保留扇区,可以计算第一个FAT表所在扇区为253+6=259接下来的02 代表有两个FAT表接下来的00 02,即0x2000=512,代表FDT(目录区)有512登记项第0x16开始的两个字节f1 00,即0xf1=241,代表每个FAT表占241个扇区第0x36到0x3d代表的就是“FAT16 ”的ASCII码,说明这张SD卡是FAT16的格式 根据上述DBR内容可得到以下信息:当前DBR所在扇区: 253每扇区字节数:512每簇扇区数:32第一个FAT表所在扇区:DBR所在扇区+保留扇区数=253+6=259FAT表占用扇区数: 241根目录首扇区:第一个FAT表扇区+FAT扇区数*FAT表数=259+241*2=741;根目录项数:512根目录占用扇区数:(根目录项数*32)/512=32第一个数据扇区:根目录扇区+根目录所占扇区数=741+32=773 我的sd卡里有一个叫做“123.txt”的文档 用记事本打开内容是: 现在我们就要找到它,并且看看它在sd卡的实际内容。 首先:跳到根目录扇区741(741*512=0x5CA00),看看它的内容: 我们在上面每32个字节逐次找(直到找到“123.txt”文件名), 一个项要占用32个字节。 前面8个字节是文件名“123 ”后面3个字节TXT是后缀名(熟悉吧!)但我们真正用到的是这32个字节最后的6个字节(2E 01 4E 55 03 00)其中“4E 55 03 00”表示文件的大小,占用0x03554E=218446个字节 (也就是218446/1024=213K)占用了(218446/512/32)14个数据簇“2E 01”表示文件的首簇号在“0x012E=302”处该文件首个数据簇的扇区位置是: 第一个数据扇区+(当前簇号-2)*每簇扇区数(也就是32)773+(302-2)*32=10373
原创力文档


文档评论(0)