Я создал виртуальный диск на C# с помощью библиотеки Dokan(.NET), и он работает достаточно хорошо.
Однако, когда я пытаюсь прочитать файл с диска в другом приложении, я получаю исключение при использовании операций синхронного чтения, таких как System.IO.File.ReadAllText(...)
.
Текст исключения: «Дескриптор не поддерживает синхронные операции. Возможно, потребуется изменить параметры конструктора FileStream, чтобы указать, что дескриптор был открыт асинхронно».
Итак, если я правильно интерпретирую это, .NET, по-видимому, пытается прочитать все содержимое файла за одну синхронную операцию, но Dokan, похоже, не позволяет этого.
Но при использовании такого метода, как ReadAllText
, я на самом деле не имею никакого контроля над тем, как создается FileStream
(разве не в этом весь смысл этого метода, в конце концов, просто получить содержимое файла, не беспокоясь о Streams и Readers буферы и прочее?).
Могу ли я каким-то образом заставить Dokan поддерживать синхронный доступ ввода-вывода к своим файловым дескрипторам? Или мне нужно как-то смириться с тем фактом, что синхронные операции с файлами, размещенными в Dokan, просто невозможны (и надеяться, что от них не зависит ни одно приложение, которое, возможно, когда-либо придется работать на моем виртуальном диске)?