【问题标题】:How do I write to a disk directly with .Net?如何使用 .Net 直接写入磁盘?
【发布时间】:2014-11-23 13:53:00
【问题描述】:

我找到了一种从驱动器读取的方法,使用 Darryl Braaten 发布的方法 How do I read a disk directly with .Net?

我现在正试图找到一种在驱动器上写入的方法,而在他的方法中,写入方法没有实现。任何人都可以提出一种方法吗?

感谢您的宝贵时间。

【问题讨论】:

  • 导入和使用WriteFile() 函数(与那里使用的ReadFile() 相当对称)。如果您的代码有任何问题,请不要再回来...
  • 我得到一个 Stream is not writable ,即使我将处理程序设置为 GENERIC_READ | GENERIC_WRITE 和 Filestream 到 FileAccess.ReadWrite。知道为什么我会收到这个错误吗?

标签: .net winapi disk


【解决方案1】:

只需使用WriteFile P/Invoke 函数:

[DllImport("kernel32.dll", SetLastError=true)]
static extern bool WriteFile(
    IntPtr hFile, 
    byte[] lpBuffer, 
    uint nNumberOfBytesToWrite, 
    out uint lpNumberOfBytesWritten,
    IntPtr lpOverlapped);

ReadFile 调用替换为WriteFile,这非常简单。请记住:

  • 您使用CreateFile 获得的句柄具有write 访问权限
  • 你必须为每个块写入字节;块大小必须是扇区大小的倍数。 IE。如果您只想写入 1 个字节,则必须读取整个扇区,修改内存中的字节,然后写回整个扇区

【讨论】:

  • 我已将句柄设置为 GENERIC_READ | GENERIC_WRITE 和 Filestream FileAccess.ReadWrite,但我得到“流不可写”。错误。
猜你喜欢
  • 2011-02-20
  • 2010-09-07
  • 1970-01-01
  • 2012-01-15
  • 2015-12-18
  • 1970-01-01
  • 2015-08-04
  • 2015-02-13
  • 1970-01-01
相关资源
最近更新 更多