Dokan / Dokan.NET (не) поддерживает синхронный ввод-вывод? - PullRequest
8 голосов
/ 16 августа 2011

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

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

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

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

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

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

1 Ответ

0 голосов
/ 04 июня 2012

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

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

msdn async file io

...