打印

请问圈圈有关U盘中FAT16的问题

[复制链接]
2028|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
khsb|  楼主 | 2008-8-26 11:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
圈圈你好,上次看过你推荐的一些资料后学到了不少东西。
现在有个问题还是不大明白,想请问一下

一个文件系统是FAT16的U盘中,读出了它的FAT和FDT
在FDT中只有文件或者文件夹的开始簇号,如何找出FAT中相对应的接下去的簇号?
也就是说,FAT表读出后,知道了簇的使用情况,如何与FDT中的文件相互对应起来?
例如:
U盘中有:111data.txt
        222data.txt
        data.txt
共3个文件

FDT为:
32 32 32 20 20 20 20 20 20 20 20 10 00 0C AA 5A 1A 39 1A 39 00 00 AB 5A 1A 39 02 00 00 00 00 00 

44 41 54 41 20 20 20 20 54 58 54 20 18 4F 7B 47 1A 39 1A 39 00 00 D5 4E 16 39 05 00 29 1F 00 00

31 31 31 20 20 20 20 20 20 20 20 10 00 5C AA 5A 1A 39 1A 39 00 00 AB 5A 1A 39 09 00 00 00 00 00

FAT为:
F8 FF FF FF FF FF 04 00 FF FF 06 00 07 00 08 00 FF FF FF FF 0B 00 0C 00 0D 00 FF FF 00 00 00 00

谢谢

相关帖子

沙发
computer00| | 2008-8-26 12:39 | 只看该作者

找到文件目录项后,里面有个文件开始簇号

用开始簇号去找FAT表中对应的项,看这个项里面的值,它的值就是下一簇号。
如果该值为0xFFF8~0xFFFF,则说明该文件已经结束。

以目录项
44 41 54 41 20 20 20 20 54 58 54 20 18 4F 7B 47 1A 39 1A 39 00 00 D5 4E 16 39 05 00 29 1F 00 00
为例,

它就是data.txt文件,文件长度为0x1F29字节(7977字节),起始簇号为0x0005。

再看FAT的簇号5,由于是FAT16,所以2字节为一FAT表项,那么簇5就是下面红色所示:
 
 簇0   簇1   簇2   簇3   簇4   簇5   簇6   簇6   簇8
F8 FF FF FF FF FF 04 00 FF FF 06 00 07 00 08 00 FF FF FF FF 0B 00 0C 00 0D 00 FF FF 00 00 00 00

读取FAT中簇5的数据,发现它的值为0x0006,说明下一簇为簇6,再读簇6的值,发现值为0x0007,
说明下一簇为簇7,再读簇7的值,发现值为0x0008,说明下一簇为簇8,再读簇8的值,
发现值为0xFFFF了,说明文件到该簇已经结束了。

那么这个文件总共有4个簇,即簇5,6,7,8。文件大小为7977字节,由此可以推断出你的文件系统没簇
大小为2K,即每簇扇区数为4。

使用特权

评论回复
板凳
khsb|  楼主 | 2008-8-26 13:25 | 只看该作者

明白了,多谢多谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

42

帖子

0

粉丝