У меня есть пара приложений, запущенных в отдельных процессах, каждое из которых записывает в центральный XML-документ на жестком диске.Я использую именованный мьютекс для синхронизации доступа к файлу, но часто получаю следующее исключение:
System.IO.IOException: The requested operation cannot be performed on a file with a user-mapped section open.
Я понял, что вызываю метод File.Exists()
до получения блокировки мьютекса, верно?возможно, что это может быть причиной?
Проще говоря, может ли кто-нибудь подтвердить, выполняет ли этот метод чтение файла, чтобы проверить, существует ли он?Мне интересно, нужно ли мне блокировать мьютекс перед проверкой наличия файла.Я проверил, что антивирусное программное обеспечение не запущено, так как это похоже на обычное исключение.
Грубый пример текущего кода:
private bool UpdateFile(string Text)
{
if (!File.Exists(@"C:\FileName.xml"))
return false;
else
{
using (Mutex mutex = new Mutex(false, "ExampleMutexName"))
{
mutex.WaitOne();
//Write to the file
mutex.ReleaseMutex();
}
return true;
}
}
РЕДАКТИРОВАТЬ: Я не использовал глобальный мьютекс, потому что все работает внутри одной учетной записи пользователя, поэтому я полагал, что локальный мьютекс будет в порядке.Тем не менее, один из процессов, которые я запускаю, - это олицетворение, поэтому я ДОЛЖЕН использовать глобальный мьютекс.Моя ошибка заключалась в том, что я думал, что все работает с одной и той же учетной записью и все будет в порядке.