Если я правильно понял параметры FileMode
и FileAccess
, мы сможем использовать их для указания одного FileStream
как Чтение / Запись и предоставить второй доступ на чтение для просмотра текущего содержимого. Однако, когда они проходят отдельно через границу пользователя / сервиса, мы получаем IOException
.
У нас есть простая установка, где служба C # запускается и генерирует текстовый файл журнала, и у нас есть приложение WinForms, которое пытается «открыть / прочитать / закрыть» (по нажатию кнопки) один и тот же файл журнала, чтобы отобразить (снимок) его содержимое.
Служба C # открывает при запуске FileStream
и сохраняет ее открытой в течение всего срока службы:
_serviceLogLock = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
Необслуживаемое (WinForms) приложение затем пытается открыть тот же файл только для чтения содержимого:
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
Это вызывает
IOException: «Процесс не может получить доступ к файлу« xxx », поскольку он используется другим процессом».
Учитывая, что служба явно открывает файл, используя опцию FileShare.Read
, я ожидаю, что приложение WinForms получит доступ для чтения, который он запрашивает.