如何使用 .Net 直接写入磁盘?
Posted
技术标签:
【中文标题】如何使用 .Net 直接写入磁盘?【英文标题】:How do I write to a disk directly with .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。知道为什么我会收到这个错误吗?
【参考方案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,但我得到“流不可写”。错误。以上是关于如何使用 .Net 直接写入磁盘?的主要内容,如果未能解决你的问题,请参考以下文章
如何直接从 ZipEntry(RubyZip、Paperclip、Rails 3)获取临时文件对象(内容类型正确,无需写入磁盘)?
如何在 C# 中清空/刷新 Windows READ 磁盘缓存?