曾经将硬盘中的数据误删除了。使用类似DISK RECOVERY的软件将文件恢复了。就算是高级格式化之后的硬盘也可以恢复。当然恢复后的文件的文件名信息丢失,而且也会将多个文件合并成一个文件。——或许这也是不可避免的。
稍微思考了一下,文件删除,高级格式化只是对FAT表进行操作。真正的文件数据并没有删除。而对文件的判断,是根据不同文件的格式相关的特征代码来进行的。问题:
我也想走一下相关技术路线,用C#做一个硬盘数据区扫描程序,将FAT表中未登录文件的数据读取出来。并保存。不知道应该如何操作?
文件读写已经懂了。关键是要进行全硬盘数据区扫描。请大虾给个方法,没有方法给个思路,没有思路给个方向~~~~多谢~~~

解决方案 »

  1.   

    使用WinAPI CreateFile来把分区当成文件来读。然后分析字节流。
    参考:
    http://blog.csdn.net/zgke/archive/2008/09/26/2981855.aspx
      

  2.   

    扫描文件不难,但主要还要分析数据。如何分析就要去看NTFS/FAT等分区格式的技术文档了。
      

  3.   

    了解 FAT  FAT32 NTFS 文件分配表.使用API CreateFileA
       [DllImport("kernel32.dll", SetLastError = true)]
            private static extern SafeFileHandle CreateFileA(string lpFileName, uint dwDesiredAccess, uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile); CreateFileA("\\\\.\\D:", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);然后根据文件分配表.找文件把.
      

  4.   

    搜索内存中存在的PE结构,抓取内存中的PE文件。
    参考
      

  5.   

    lz的要求的功能是要通过直接读写磁盘扇区达到
    http://blog.csdn.net/iiprogram/archive/2008/03/26/2220472.aspx
      

  6.   

    win下的磁盘结构包括 fat16 vfat fat32 ntfs .... 
    fat vfat fat32 应该是公开,可以网上查
    ntfs 微软没有公开,不过,可以参考一下这个
    http://www.linux-ntfs.org/doku.php
      

  7.   

    这个问题比较复杂,只能稍稍说一下。文件恢复软件有两种实现方法:一种是事先安装一个自己的驱动程序,对文件系统操作进行过滤,将删除的文件移动到自己的“回收站”里面,(这个回收站可以隐藏起来),恢复时再移动回原位置。另一种方法是事后对文件系统进行扫描,寻找残留的文件信息。例如FAT类型文件系统在删除文件时,会清除FAT表中该文件的记录,并将该文件对应的目录入口首字节改为0xe5,其它不变,程序可以扫描找出该目录入口(如果尚未被新文件占用),根据目录入口中记录的文件大小和首簇号来恢复。这种方法只适用于空间连续分配的文件。
    这两种方法都需要了解文件系统,各种不同的文件系统差异很大。
      

  8.   

    稍微思考了一下,文件删除,高级格式化只是对FAT表进行操作。真正的文件数据并没有删除。而对文件的判断,是根据不同文件的格式相关的特征代码来进行的------------------------
    首先纠正上面错误的说法
    在进行数据恢复的时候,对文件的判断并不是根据特征码来判断的,是对文件分配表的记录来判断的,对于NTFS来说就是根据MFT
    来判断的,这样恢复出来的文件才是正确的。如果根据特征码判断的话,恢复出来的一般是不正确的,除非一些特别小的纯文本文件。因为一个文件在硬盘上保存是被分成很多个分散块的,很多分散块合并起来才是个完整的正确的文件。
    这些信息是记录在文件分配表的(对NTFS 是MFT)。
    所以要想搞这个软件需要先学习文件系统,这也就是从网上下载的软件都是区分文件系统格式的,当然了,很多时候用软件扫描出来的文件是不对的,这时候就需要人工分析才可以,但这仅仅限于恢复不多文件的情况下,如果文件多了,恢复起来相当费时间。http://www.sosdb.com
      

  9.   

    应该说在这个版区无解...对C/C++、汇编来说还是相对比较简单的...由于在Windows系统中FAT、MFT等文件系统低级信息受系统级保护,应用程序必须取得0环权限才能做读取及修改等操作...而这需要写底层驱动,.NET目前是绝对做不了的...这个问题与以前有人问过的内存虚拟磁盘一样不是.NET的领域,如果楼主想研究就去学C/C++,还要学习一下Windows核心编程之类的...
      

  10.   

    Ctrl+z
      

  11.   


    "对文件的判断并不是根据特征码来判断的" 我过去用过相关软件,里面的确是根据文件特征码进行判断的。因为如果进行了格式化,MFT或者FAT中的信息已经被删除了。还如何通过这个信息来进行恢复呢?