Запрошенную операцию нельзя выполнить для файла с открытой пользователем сопоставленной секцией
Я разрабатываю приложение, которое много читает и пишет (но синхронно, хотя) в определенный файл на диске. Однако, чем больше файл становится, тем чаще я получаю следующее исключение IOException:
запрошенная операция не может быть выполняется в файле с отображением пользователя секция открыта.
как вы можете видеть, исключение выбрасывается изнутри File.WriteAllText . Я подозревал, что исключение должно было сделать при одновременном чтении и записи, поэтому старались ограничить доступ к файлу. Как lock и Mutex казалось, увеличивалось количество исключений вместо того, чтобы предотвращать их. Так что же все-таки происходит? Что именно означает это исключение и как его можно предотвратить?
Я писал в файл (open, loop (пишет),close), но после ошибки дублировал вызов rutine. поэтому я заканчиваю "запрошенная операция не может быть выполнена в файле с открытым разделом, сопоставленным с пользователем."! Ну, я удалил второй звонок и проблема решена. Кажется, что два (open/close) (open/close) рутины над одним и тем же файлом происходят слишком рано один за другим. Некоторые разработчики предлагают вызвать ГК. Проверьте правильность закрытия каждого ввода-вывода операция. Не выполнять complete(open,loop (пишет),close) слишком рано. Кажется, что когда одна операция будет завершена, а второй запрос прибывает, и это бросает проблему.
первым решением будет отключить свой антивирус. Еще лучше вы можете добавить папку в список исключений сканирования вашего антивируса.
У вас включено программное обеспечение для сканирования вирусов в реальном времени?
Я потерял счет количества раз, когда проблемы блокировки файлов оказались вызваны программным обеспечением для сканирования вирусов.
Это может не иметь отношения к вашей ситуации, но вы можете подтвердить, заблокирован ли файл (и что) с помощью загружаемой утилиты под названием "Unlocker", которая может обнаруживать и удалять блокировки файлов и папок.
Это все еще происходит даже с одним потоком / процессом?
Если это так,это не проблема с потоками.
Если нет, то вы можете неправильно использовать мьютекс/блокировку. Возможно, вам стоит разместить соответствующий код здесь.
Мне кажется, что у вас есть какой-то другой процесс, который открывает все измененные файлы с разрешениями, которые означают, что вы не можете открыть его для изменения. Это может быть антивирус, онлайн резервное копирование, синхронизация файлов онлайн.
Читайте также: