我想在读一个文件的时候,同时获得这个文件前512个字节所在的扇区是第几个扇区。不知道这个功能怎么实现。

解决方案 »

  1.   

    以下资料可能对你有用:
    第二FAT为第一FAT的备份,   FAT区紧接在OBR之后,其大小由本分区的大小及文件分配单元的大小决定。关于FAT的格式历来有很多选择   
      目录区紧接在第二FAT表之后,只有FAT还不能定位文件在磁盘中的位置,FAT还必须和DIR配合才能准确定位文件的位置。   
      DIR记录着每个文件(目录)的起始单元(这是最重要的)、文件的属性等。定位文件位置时,操作系统根据DIR中的起   
      始单元,结合FAT表就可以知道文件在磁盘的具体位置及大小了。在DIR区之后,才是真正意义上的数据存储区,即DATA区。   
      操作系统从目录区中读取文件信息(包括文件名、后缀名、文件大小、修改日期和文件在数据区保存的第一个簇的簇号),   
      Win9x的文件删除工作是很简单的,只在目录区做了一点小改动——将目录区的文件的第一个字符改成了E5就表示将改文件删除了。   
      目录区中的目录项变化较多,一个目录项仍占32字节,可以是文件目录项、子目录项、卷标项(仅跟目录有)、已删除目录项、长文件名   
      目录项等。目录项中原来在DOS下保留未用的10个字节都有了新的定义,全部32字节的定义如下:     
      (1)   0--   7字节   文件正名。     
      (2)   8--10字节   文件扩展名。     
      (3)   11字节   文件属性,按二进制位定义,最高两位保留未用,0至5位分别是只读位、隐藏位、系统位、卷标位、子目录位、归档位。     
      (4)   11--13字节   仅长文件名目录项用,用来存储其对应的短文件名目录项的文件名字节校验和等。     
      (5)   13--15字节   24位二进制的文件建立时间,其中的高5位为小时,次6位为分钟。     
      (6)   16--17字节   16位二进制的文件建立日期,其中的高7位为相对于1980年的年份值,次4位为月份,后5位为月内日期。     
      (7)   18--19字节   16位二进制的文件最新访问日期,定义同(6)。   
      (8)   20--21字节   起始簇号的高16位。   
      (9)   22--23字节   16位二进制的文件最新修改时间,其中的高5位为小时,次6位为分钟,后5位的二倍为秒数。     
      (10)24--25字节   16位二进制的文件最新修改日期,定义同(6)。   
      (11)26--27字节   起始簇号的低16位。     
      (12)28--31字节   32位的文件字节长度。     
      其中第(4)至(8)项为以后陆续定义的。   对于子目录项,其(12)为零;已删除目录项的首字节值为E5H。在可以使用长文件名的FAT32系统中,   
      文件目录项保存该文件的短文件名,长文件名用若干个长文件名目录项保存,长文件名目录项倒序排在文件短目录项前面,全部是采用双字   
      节内码保存的,每一项最多保存十三个字符内码,首字节指明是长文件名的第几项,11字节一般为0FH,12字节指明类型,13字节为校验和,   
      26--27字节为零。
      

  2.   

    1、Win9x中,“我的电脑”支持最长125个汉字或250个西文的长文件名。长文件名FDT中,有两种记录:一种是扩展的8.3记录,另一种是长文件名记录。若FDT记录中首簇号低字为0且文件属性为0Fh,则为长文件名记录,否则为扩展8.3记录。文件的原始文件名(长名)以双字节字符方式存放在长文件记录中,其8.3名字和首簇号等信息则全部存放在扩展8.3记录中。   
        
      2、每条长文件记录可以存放13个字符。大小写是区分的,汉字符是它的汉字内码,西文符是扩展到16位的ASCII码。这13个字符码整数在记录中的字节位移依次是:01h、03h、05h、07h、09h、0Eh、10h、12h、14h、16h、18h、1Ch、1Eh。   
        
      3、设某文件的长名包含K*13+M个字符(M>0),则该文件在FDT中占用连续的K+2条记录:末记录是该文件的扩展8.3信息;次末记录存放长名的第一段字符(13个),该记录的首字节为01;次次末记录存放长名的第二段字符,该记录的首字节为02;...;次记录存放长名的第K段字符,该记录的首字节为K;首记录存放长名的最后M个字符,0000标识着名字串的结束,该记录的首字节为41h+K。   
        
      4、若文件名符合8.3规格且不包含小写字母,则只有扩展8.3记录。   
        
      5、长名记录中0D位移字节是长文件名的校验码。
      

  3.   

    多谢,好像很有用,不能大侠有没有关于fat的文件格式,
    我想知道我的一个分区,那么第一fat和第二fat从什么地方开始,而且最主要的就是所说的DIR在什么地方。大概什么格式。
    有没有这方面的资料,给个连接也可以,比较懒,自己找还得找一会。
      

  4.   

    这个只要研究一下文件系统的结构就可以了,FAT最简单,是一个松散的链式结构,FAT表读出来之后分析一下就可以了,一般是在卷的开头位置,在windows 2000/xp下可以用绝对磁盘读写,win98下麻烦一点。它的spec在微软网站上有的,仔细看看就好了。在这里:
    http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspxNTFS麻烦一点,没有官方的spec,但是也研究的差不多了,几个网站:
    www.ntfs.com
    http://www.linux-ntfs.org/
    Linux下有几个软件是用来读写NTFS的,fuse,ntfs-3g。研究一下代码就差不多了。
      

  5.   

    http://www.linux-ntfs.org/是不错。
    推荐阅读一下戴士剑的那本《数据恢复》第二版。FDT/FAT, MFT/BITMAP