C # FileSystemWatcher процесс уже используется - PullRequest
0 голосов
/ 31 января 2019

Я использую FileSystemWatcher для обнаружения файла.Как только он обнаружит файл, я хочу прочитать содержимое и сохранить его в виде строки.Но при попытке прочитать содержимое я получаю процесс уже используется.

Вот мой код:

var watcher = new FileSystemWatcher(b);
watcher.EnableRaisingEvents = true;
watcher.Path = Path.GetDirectoryName(b + "CMDExec.txt");
watcher.Filter = Path.GetFileName(b + "CMDExec.txt");
watcher.Created += Watcher_Created;

private void Watcher_Created(object sender, FileSystemEventArgs e)
{
    string b = Path.GetTempPath();
    string text = System.IO.File.ReadAllText(b + "CMDExec.txt");
}

1 Ответ

0 голосов
/ 31 января 2019

Вы должны понимать, как в этом случае работает блокировка файлового ввода-вывода.

Позволяет вызвать процесс, создающий файловый процесс A

Процесс A сначала создаст файл и получит эксклюзивную блокировку файла для записи содержимого в него

Как только это произошловы получите событие создания файла, чтобы указать, что файл был создан.Но на данный момент процесс A все еще удерживает монопольную блокировку файла, поскольку еще не завершил запись содержимого.

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

Но имейте в виду, что ваше чтение получит общую блокировку чтения файла, не позволяющую любому другому процессу получить эксклюзивную блокировку, пока чтение не будет завершено.Поэтому, если процесс A попытается снова заблокировать файл исключительно, он потерпит неудачу и может произойти сбой, если он не обработал его правильно.

Добро пожаловать в мир параллелизма и расы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...