Запрошенную операцию нельзя выполнить для файла с открытой пользователем сопоставленной секцией

Обновлено: 07.07.2024

Я разрабатываю приложение, которое много читает и пишет (но синхронно, хотя) в определенный файл на диске. Однако, чем больше файл становится, тем чаще я получаю следующее исключение IOException:

запрошенная операция не может быть выполняется в файле с отображением пользователя секция открыта.

как вы можете видеть, исключение выбрасывается изнутри File.WriteAllText . Я подозревал, что исключение должно было сделать при одновременном чтении и записи, поэтому старались ограничить доступ к файлу. Как lock и Mutex казалось, увеличивалось количество исключений вместо того, чтобы предотвращать их. Так что же все-таки происходит? Что именно означает это исключение и как его можно предотвратить?

Я писал в файл (open, loop (пишет),close), но после ошибки дублировал вызов rutine. поэтому я заканчиваю "запрошенная операция не может быть выполнена в файле с открытым разделом, сопоставленным с пользователем."! Ну, я удалил второй звонок и проблема решена. Кажется, что два (open/close) (open/close) рутины над одним и тем же файлом происходят слишком рано один за другим. Некоторые разработчики предлагают вызвать ГК. Проверьте правильность закрытия каждого ввода-вывода операция. Не выполнять complete(open,loop (пишет),close) слишком рано. Кажется, что когда одна операция будет завершена, а второй запрос прибывает, и это бросает проблему.

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

У вас включено программное обеспечение для сканирования вирусов в реальном времени?

Я потерял счет количества раз, когда проблемы блокировки файлов оказались вызваны программным обеспечением для сканирования вирусов.

Это может не иметь отношения к вашей ситуации, но вы можете подтвердить, заблокирован ли файл (и что) с помощью загружаемой утилиты под названием "Unlocker", которая может обнаруживать и удалять блокировки файлов и папок.

Это все еще происходит даже с одним потоком / процессом?

Если это так,это не проблема с потоками.

Если нет, то вы можете неправильно использовать мьютекс/блокировку. Возможно, вам стоит разместить соответствующий код здесь.

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

Читайте также: