我使用Dokan(.NET)库在C#中创建了一个虚拟驱动器,它工作得很好。
但是,当我尝试从另一个应用程序的驱动器中读取文件时,每当使用同步读取的操作时,我都会得到一个异常,比如System.IO.File.ReadAllText(...)。
异常的文本是:"Handle不支持同步操作。可能需要更改FileStream构造函数的参数,以指示句柄是异步打开的“。
因此,如果我的理解是正确的,.NET显然会尝试在单个同步操作中读取文件的全部内容,但Dokan似乎不允许这样做。
但是,在使用像ReadAllText这样的方法时,我实际上无法控制FileStream的构造方式(毕竟,这不就是该方法的全部意义所在吗?)
我能让Dokan以某种方式支持它的文件句柄上的同步I/O访问吗?或者我必须以某种方式接受这样的事实,即在Dokan托管的文件上不可能进行同步操作(并希望可能必须在我的虚拟驱动器上工作的应用程序不依赖于它们)?
发布于 2012-06-04 23:45:16
为什么你需要文件读取的同步性?您可以对流进行异步读取,并在完成时通过回调进行处理。
这是一个很好的演示/教程,介绍了异步文件I/O的不同方法:
msdn async file io
https://stackoverflow.com/questions/7077477
复制相似问题