Поддерживает ли Dokan/Dokan.NET (не) синхронный ввод-вывод?

Я создал виртуальный диск на C# с помощью библиотеки Dokan(.NET), и он работает достаточно хорошо.

Однако, когда я пытаюсь прочитать файл с диска в другом приложении, я получаю исключение при использовании операций синхронного чтения, таких как System.IO.File.ReadAllText(...).

Текст исключения: «Дескриптор не поддерживает синхронные операции. Возможно, потребуется изменить параметры конструктора FileStream, чтобы указать, что дескриптор был открыт асинхронно».

Итак, если я правильно интерпретирую это, .NET, по-видимому, пытается прочитать все содержимое файла за одну синхронную операцию, но Dokan, похоже, не позволяет этого.

Но при использовании такого метода, как ReadAllText, я на самом деле не имею никакого контроля над тем, как создается FileStream (разве не в этом весь смысл этого метода, в конце концов, просто получить содержимое файла, не беспокоясь о Streams и Readers буферы и прочее?).

Могу ли я каким-то образом заставить Dokan поддерживать синхронный доступ ввода-вывода к своим файловым дескрипторам? Или мне нужно как-то смириться с тем фактом, что синхронные операции с файлами, размещенными в Dokan, просто невозможны (и надеяться, что от них не зависит ни одно приложение, которое, возможно, когда-либо придется работать на моем виртуальном диске)?


person Andreas Baus    schedule 16.08.2011    source источник
comment
Вам удалось это решить. Я новичок в Докане. Самая новая в настоящее время 0.6   -  person Bamboo    schedule 10.12.2014


Ответы (1)


Любая причина, по которой вам нужна синхронность в чтении файла? Вы можете выполнить асинхронное чтение в поток и обработать его завершение с помощью обратного вызова.

У этого есть хорошая презентация/учебник по различным способам выполнения асинхронного ввода-вывода файлов:

асинхронный файл ввода-вывода msdn

person negEntropy    schedule 04.06.2012
comment
Тип доступа не зависит от меня. Я просто хотел предоставить виртуальную файловую систему, к которой мог бы получить доступ каждый. Если такой доступ произойдет, например, приложение .NET, написанное кем-то другим, который использует метод ReadAllText для чтения файла с виртуального диска, я мало что смогу сделать. Файловая система должна просто поддерживать любой доступ, который могут использовать произвольные приложения. - person Andreas Baus; 05.09.2012