提问人:Andreas Baus 提问时间:8/16/2011 更新时间:6/4/2012 访问量:1205
Dokan/Dokan.NET(不)是否支持同步 I/O?
Does Dokan/Dokan.NET (not) support synchronous I/O?
问:
我使用 Dokan(.NET) 库在 C# 中创建了一个虚拟驱动器,它运行良好。
但是,当我尝试从另一个应用程序中的驱动器读取文件时,每当使用同步读取的操作时,我都会收到异常,例如 .System.IO.File.ReadAllText(...)
异常的文本是:“句柄不支持同步操作。可能需要更改 FileStream 构造函数的参数,以指示句柄是异步打开的”。
因此,如果我正确地解释了这一点,.NET 显然会尝试在单个同步操作中读取文件的全部内容,但 Dokan 似乎不允许这样做。
但是,当使用像这样的方法时,我真的无法控制构造方式(毕竟,这难道不是该方法的全部意义吗,只需获取文件内容,而不必为流、读取器和缓冲区等而烦恼?ReadAllText
FileStream
我可以让 Dokan 以某种方式支持其文件句柄上的同步 I/O 访问吗?或者我是否必须以某种方式接受这样一个事实,即在 Dokan 托管的文件上无法进行同步操作(并希望可能必须在我的虚拟驱动器上工作的应用程序都依赖于它们)?
答:
0赞
negEntropy
6/4/2012
#1
您为什么需要在文件读取中保持同步性的任何原因?您可以对流进行异步读取,并在流完成时通过回调进行处理。
这有一个很好的演示/教程,介绍了做异步文件 I/O 的不同方法:
评论
2赞
Andreas Baus
9/5/2012
访问类型不由我决定。我只是想提供一个任何人都可以访问的虚拟文件系统。但是,如果发生这种访问,例如,由其他人编写的 .NET 应用程序,而其他人恰好使用该方法从虚拟驱动器读取文件,那么我无能为力。文件系统应该能够支持任意应用程序可能使用的任何类型的访问。ReadAllText
评论