加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何逐位读取整个磁盘的内容

发布时间:2020-12-16 00:03:01 所属栏目:百科 来源:网络整理
导读:我有一张闪存卡,我需要在驱动器的整个内容上计算校验和. 如果我可以获得整个驱动器的流,我可以一点一点地阅读它. 有谁知道是否有这样做的API? 到目前为止我看到的一切都要求我打开一个文件. 有没有办法一点一点地读取整个驱动器的内容? 解决方法 如果要编
我有一张闪存卡,我需要在驱动器的整个内容上计算校验和.

如果我可以获得整个驱动器的流,我可以一点一点地阅读它.

有谁知道是否有这样做的API?

到目前为止我看到的一切都要求我打开一个文件.

有没有办法一点一点地读取整个驱动器的内容?

解决方法

如果要编写C#代码,则必须使用P / Invoke从磁盘读取数据(RAW访问).

Is there any way to just read an entire drive’s contents bit by bit?

您必须在驱动器(闪存卡的逻辑表示,安装在其上的文件系统,由驱动器号指定)和磁盘(闪存卡的物理表示,由磁盘编号指定)之间做出改变.

有关如何从驱动器/磁盘读取RAW数据,请参阅my previous answer:

基本上,您首先需要磁盘/驱动器的句柄:

// For a DISK:
IntPtr hDisk = CreateFile(string.Format("\.PhysicalDrive{0}",diskNumber),GenericRead,Read | Write,OpenExisting,IntPtr.Zero);

// For a DRIVE
IntPtr hDrive = NativeMethods.CreateFile(
    string.Format("\.{0}:",DriveLetter)
    GenericRead,IntPtr.Zero,IntPtr.Zero);

然后使用SetFilePointerEx(这样你可以移动你想要读取的偏移量),ReadFile(填充从磁盘/驱动器读取的字节的缓冲区),CloseHandle(关闭CreateFile打开的句柄).

通过块读取磁盘/驱动器(基本上,从偏移“0”到偏移“磁盘/驱动器大小”的循环).

重要的是(或ReadFile总是会失败):读取块的大小必须是磁盘扇区大小的倍数(通常为512字节).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读