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

And*_*aus 8 c# io file dokan

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

但是,当我尝试从另一个应用程序中的驱动器读取文件时,每当使用同步读取的操作时,我都会收到异常,例如System.IO.File.ReadAllText(...).

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

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

但是当使用像ReadAllText我这样的方法时,实际上并没有对FileStream构造方式进行任何控制(这不是该方法的全部意义,毕竟,只需获取文件内容而不必费心使用Streams和Readers and Buffers什么?).

我可以让Dokan以某种方式支持文件句柄上的同步I/O访问吗?或者我必须以某种方式忍受在Dokan托管文件上无法实现同步操作的事实(并且希望没有可能必须在我的虚拟驱动器上运行的应用程序依赖于它们)?

小智 0

您需要文件读取同步性的任何原因吗?您可以对流进行异步读取,并在完成时通过回调进行处理。

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

msdn 异步文件io

  • 访问类型不由我决定。我只是想提供一个任何人都可以访问的虚拟文件系统。但是,如果发生这种访问,例如,由其他人编写的 .NET 应用程序碰巧使用“ReadAllText”方法从虚拟驱动器读取文件,那么我无能为力。文件系统应该能够支持任意应用程序可能使用的任何类型的访问。 (2认同)