gpt4 book ai didi

c# - 如何一点一点读取整个磁盘的内容

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:47 24 4
gpt4 key购买 nike

我有一张闪存卡,我需要用它来计算驱动器全部内容的校验和。

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

有谁知道是否有执行此操作的 API?

到目前为止,我看到的所有内容都需要我打开一个文件。

有什么方法可以一点一点地读取整个驱动器的内容吗?

最佳答案

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

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

您必须区分驱动器(闪存卡的逻辑表示,上面安装了文件系统,由驱动器指定字母)和磁盘(闪存卡的物理表示,由磁盘编号指定)。

参见 my previous answer关于如何从驱动器/磁盘读取 RAW 数据:

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

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

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

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

按 block 读取磁盘/驱动器(基本上,从偏移量“0”到偏移量“磁盘/驱动器大小”的循环)。

重要的是(否则 ReadFile 将始终失败):读取 block 的大小必须是磁盘扇区大小的倍数(通常为 512 字节)。

关于c# - 如何一点一点读取整个磁盘的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9417557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com