【问题标题】:Does Dokan/Dokan.NET (not) support synchronous I/O?Dokan/Dokan.NET(不)是否支持同步 I/O?
【发布时间】:2011-10-27 23:52:21
【问题描述】:

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

但是,当我尝试在另一个应用程序中从驱动器中读取文件时,只要使用同步读取的操作(例如 System.IO.File.ReadAllText(...))就会出现异常。

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

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

但是当使用像ReadAllText 这样的方法时,我真的无法控制FileStream 的构造方式(这不是该方法的重点吗,毕竟,只需获取文件内容而不不必为 Streams、Readers 和 Buffers 等而烦恼?)。

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

【问题讨论】:

  • 你设法解决了这个问题。我是 Dokan 的新手。目前最新的是 0.6

标签: c# file io dokan


【解决方案1】:

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

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

msdn async file io

【讨论】:

  • 访问类型不取决于我。我只是想提供一个任何人都可以访问的虚拟文件系统。如果发生这种访问,例如,由其他人编写的 .NET 应用程序,碰巧使用ReadAllText 方法从虚拟驱动器读取文件,我无能为力。文件系统应该能够支持任意应用程序可能使用的任何类型的访问。
猜你喜欢
  • 2016-04-14
  • 1970-01-01
  • 2011-11-19
  • 2021-06-29
  • 2015-02-04
  • 1970-01-01
  • 2018-02-16
  • 2012-09-14
相关资源
最近更新 更多