Как отладить эту ошибку? "Процесс не может получить доступ к файлу X, потому что он используется другим процессом"

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

Процесс не может получить доступ к файлу X, потому что он используется другим процессом.

Что означает эта ошибка и как ее отладить?

Ответ 1

Что означает эта ошибка:

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

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

Эта ошибка также применима к каталогам.

Как отладить его:

Узнайте, какой процесс или компонент в вашем приложении открыл файл и еще не закрыл его. Вы можете использовать Sysinternals Process Explorer "Find Handle", чтобы найти процесс нарушения и закрыть дескриптор.

Если ваш собственный код открыл дескриптор, нет общей процедуры для поиска проблемы. Просмотрите свой код. Код комментария до тех пор, пока ошибка не исчезнет.

Общие ошибки:

  • Утечка a FileStream: File.Open(path); //leak!
  • Не переносить ресурсы в оператор using. В большинстве случаев одноразовые ресурсы должны быть заключены в using.
  • Открыв файл в каком-либо приложении, например:
    • Текстовый редактор
    • Инструмент разработки
    • Сервер базы данных
    • Окно проводника Windows с соответствующим выбранным файлом
    • Окно командной строки, которое имеет соответствующий каталог, заданный как текущий каталог

Как исправить:

Закройте другие приложения, используя этот файл. Убедитесь, что вы закрываете свои файлы, когда закончите с ними. Используйте оператор using.

Ответ 2

  • или может быть, что инструмент разработчика, который вы используете, открывает файл как инструмент запросов к базе данных?
  • или у вас открыто окно проводника и выбранный файл
  • или командной строки cd-ed в папку, с которой вы взаимодействуете.