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

Does Dokan/Dokan.NET (not) support synchronous I/O?

提问人:Andreas Baus 提问时间:8/16/2011 更新时间:6/4/2012 访问量:1205

问:

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

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

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

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

但是,当使用像这样的方法时,我真的无法控制构造方式(毕竟,这难道不是该方法的全部意义吗,只需获取文件内容,而不必为流、读取器和缓冲区等而烦恼?ReadAllTextFileStream

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

C# 文件 io dokan

评论

0赞 Bamboo 12/10/2014
你设法解决了这个问题吗?我是Dokan的新手。最新目前为 0.6

答:

0赞 negEntropy 6/4/2012 #1

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

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

MSDN 异步文件 IO

评论

2赞 Andreas Baus 9/5/2012
访问类型不由我决定。我只是想提供一个任何人都可以访问的虚拟文件系统。但是,如果发生这种访问,例如,由其他人编写的 .NET 应用程序,而其他人恰好使用该方法从虚拟驱动器读取文件,那么我无能为力。文件系统应该能够支持任意应用程序可能使用的任何类型的访问。ReadAllText