Dokan / Dokan.. NET(不)支持同步I/O

本文关键字:Dokan 同步 支持 NET | 更新日期: 2023-09-27 18:05:57

我使用Dokan(. net)库在c#中创建了一个虚拟驱动器,它运行得很好。

然而,当我尝试从另一个应用程序中的驱动器读取文件时,无论何时使用同步读取操作,如System.IO.File.ReadAllText(...),我都会得到一个异常。

异常的文本是:"句柄不支持同步操作。可能需要更改FileStream构造函数的参数,以指示句柄是异步打开的。

因此,如果我正确地解释了这一点,. net显然试图在单个同步操作中读取文件的整个内容,但Dokan似乎不允许。

但是当使用像ReadAllText这样的方法时,我真的无法控制FileStream的构造方式(这不是该方法的全部要点吗?毕竟,简单地获取文件内容,而不必麻烦流,阅读器和缓冲区等等?)

我能让Dokan以某种方式支持同步I/O访问它的文件句柄吗?或者我必须以某种方式接受这样一个事实,即同步操作在dokan托管的文件上是不可能的(并希望任何可能必须在我的虚拟驱动器上工作的应用程序都不依赖于它们)?

Dokan / Dokan.. NET(不)支持同步I/O

为什么需要文件读取同步?你可以对流进行异步读取,并通过回调完成处理。

这里有一个很好的演示/教程,介绍了异步文件i/o的不同方法:

msdn async file io