Error процесс не может получить доступ к файлу так как этот файл занят другим процессом

С ошибкой «Процесс не может получить доступ к файлу, так как этот файл занят другим процессом» пользователи часто сталкиваются при настройке сайта IIS.

С ошибкой «Процесс не может получить доступ к файлу, так как этот файл занят другим процессом» пользователи часто сталкиваются при попытке выполнить команду netsh или в процессе настройки сайта IIS. Узнаем, как ее исправить.

Содержание

  • 1 Причины ошибки
  • 2 Запуск команды с доступом администратора
  • 3 Установка другого диапазона IP-адресов
  • 4 Разрешения конфликта портов IIS

Причины ошибки

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

  1. Отсутствуют права администратора для запуска команды из консоли командной строки или PowerShell.
  2. Порт 80 или 443 используется другим процессом, что типично для компьютеров под управлением IIS (Internet Information Services).
  3. Неправильно настроен раздел реестра ListenOnlyList в оснастке IIS.

Запуск команды с доступом администратора

Если не удается выполнить команду netsh, скорее всего, ошибка возникает из-за отсутствия прав администратора. В большинстве случаев это происходит, когда пользователь пытается запустить команду, которая добавляет исключения в динамический диапазон портов для собственных приложений Windows или сторонних программ. Имейте в виду, что эта операция требует доступа администратора. Чтобы предоставить его, выполните следующие шаги.

С помощью системного поиска найдите командную строку и запустите ее с правами администратора. Если отобразится запрос контроля учетных записей (UAC), подтвердите его нажатием на кнопку «Да».

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

Установка другого диапазона IP-адресов

Если не удалось решить конфликт DNS с помощью утилиты netsh, попробуйте использовать другой подход. По отзывам пользователей, проблема была разрешена после того, когда они установили совершенно другой диапазон IP-адресов вместо создания диапазона исключений. Этот способ подтвержден при разрешении конфликта между DNS и бухгалтерской программой Quickbooks.

В консоли командной строки с администраторскими правами запустите следующие команды:

  • netsh int ipv4 set dynamicport tcp start=10000 num=1000
  • netsh int ipv4 set dynamicport udp start=10000 num=1000

Если этот метод не применим к вашей ситуации, перейдите к следующему способу.

Разрешения конфликта портов IIS

Если столкнулись с ошибкой при правом щелчке мыши на элемент сайта внутри оснастки IIS MMC, попробуйте использовать утилиту Netstat.exe, чтобы узнать, занят ли порт 80 или 443 другим процессом. Эта проблема распространена на компьютерах под управлением Microsoft IIS 6.0 и 7.0. Основываясь на официальной документации Майкрософта, сообщение об ошибке появится в случае, если одно из следующих условий применимо к текущей ситуации:

  1. Параметр ListenOnlyList неправильно настроен на компьютере IIS.
  2. Другой процесс использует TCP-порт (80) или SSL-порт (443), требуемый IIS.

Для исправления ошибки сначала запустим утилиту Netstat.exe, чтобы определить, использует ли другой процесс указанные порты. Если они не заняты другим процессом, проверим раздел ListenOnlyList, правильно ли он настроен.

Откройте командную строку, предоставив ей доступ администратора, с помощью поисковой системы Windows. Для запуска утилиты Netstat.exe выполните команду:

netstat -ano

При отображении результатов, прокрутите список активных подключений и проверьте, занятии ли порты 80и 443 другим процессом.

При их использовании отображаемая информация позволит определить причину ошибки. Для этого поищите в интернете конкретные шаги по разрешению конфликта в соответствии с PID-порта.

Если порты не используются, закройте командную строку и запустите Редактор реестра командой regedit из окна Win + R.

На левой панели навигации перейдите в следующее расположение:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesHTTPParametersListenOnlyList

Если по указанному пути ListenOnlyList отсутствует, не нужно его создавать, поскольку по умолчанию используется IP-адрес 0.0.0.0.

Перед редактированием раздела нужно становить службу HTTP, на которой работает IIS. Поэтому временно сверните редактор реестра, поскольку сейчас вернемся к нему.

Снова откройте командную строку с правами администратора.

В консоли выполните указанную команду, чтобы остановить службу HTTP, ответственную за запуск IIS:

net stop http

Чтобы продолжить операцию, введите «Y» и нажмите на Enter. После успешного завершения закройте консоль и вернитесь в редактора реестра.

Перейдите на правую панель раздела ListenOnlyList и убедитесь, что он содержит допустимые IP-адреса. При обнаружении недопустимых адресов, удалите их.

Если присутствует адрес 0.0.0.0, нужно удалить все остальные IP-адреса. После закройте редактор и перезагрузите ПК.

После перезагрузки служба HTTP должна быть запущена автоматически. Если этого не произошло, в командной строке с доступом администратора выполните:

net start http

Если отобразится сообщение, что запрошенная служба уже запущена, следуйте далее.

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

Почему процесс не может получить доступ к файлу и что делать?

Чтобы удалить или изменить файл, он обязательно должен быть свободен от других процессов. Если его уже использует какая-то программа, система накладывает запрет на редактирование элемента, так как это повредит работу программного обеспечения. В этом случае появляется сообщение «Процесс не может получить доступ к файлу, так как этот файл занят другим процессом». Чтобы это исправить, нужно освободить его. Только вот сделать подобное куда сложнее, чем кажется на первый взгляд.

Почему “Процесс не может получить доступ к файлу”?

Одновременно работать с конкретным файлом может только одна программа. Речь идет не о библиотеках общего использования, которые используются только для извлечения данных, а об элементах, предназначенных для перезаписи. Если это кэш-файл игры, здесь содержится пользовательская информация или происходит постоянная обработка данных, и Windows накладывает ограничение. Данные файлы становятся недоступными для удаления или ручного изменения до тех пор, пока мы не завершим процесс, использующий их.

Как удалить файл, если процесс не может получить доступ к файлу?

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

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

Как можно решить проблему «процесс не может получить доступ к файлу»:

  • Unlocker – специальная программа, созданная как раз для подобных ситуаций. Она автоматически обнаруживает связанные с файлом процессы и завершает их. По сути она делает то же самое, что нужно выполнять вручную, но только в автоматическом режиме. Она имеет минимальный размер и проверена во многих системах, поэтому точно не заражена вирусами. После скачивания и установки, нужно нажать правой кнопкой мыши по файлу и выбрать «Unlock».
  • Завершить связанные процессы. Обычно вполне реально догадаться, какая именно задача использует файл. Для этого нужно открыть Ctrl + Shift + Esc и развернуть список «Подробнее». Здесь будет довольно много процессов, но большинство из них системные, нужно найти те, которые были запущены пользователем. Чтобы удалить файл кэша Google Chrome, нужно закрыть все задачи Google. Для их завершения нужно нажать правой кнопкой мыши и выбрать «Снять задачу».

Процесс не может получить доступ к файлу

  • Установить правильные атрибуты. К каждому файлу можно установить подходящие привилегии. Нужно нажать правой кнопкой мыши по файлу и на вкладке «Общие» установить пункт «Только чтение». После перезагрузки компьютера возможность удаления может появиться.
  • Удаление в безопасном режиме. Очень часто это срабатывает, так как при данном способе запуска система не загружает все посторонние программы. Нужно кликнуть на перезапуск ПК и в момент пуска нажать клавишу F8 (может быть другая) для выбора варианта запуска. В безопасном режиме удалить можно практически любой файл.
  • Снять защиту диска на запись. Она может быть установлена на программном и физическом уровне. Первым делом нужно посмотреть на накопителе (обычно это флешка), нет ли здесь специального тумблера. Рядом должна быть соответствующая пометка. В системе в редакторе реестра также следует найти параметр WriteProtect и установить ему значение 0.

Процесс не может получить доступ к файлу

Как исправить проблему при использовании консоли и IIS?

Точно такая же самая ошибка «процесс не может получить доступ к файлу» может появиться при запуске команды netsh или при выполнении настройки сайта IIS. В таком случае проблема может быть вызвана недостатком прав для выполнения действия, попытке подключения к занятым портам 80 и 443 или некорректной настройкой реестра.

3 способа исправить ошибку:

  • Запустить консоль с повышенными привилегиями. Для этого в меню Пуск нужно ввести «Командная строка» и выбрать «Запуск от имени администратора».
  • Переключиться на другой пул IP-адресов. Также это может сработать при конфликте между DNS и Quickbooks. Достаточно выполнить команду netsh int ipv4 set dynamicport tcp start=10000 num=1000 – затем такую же самую, но вместо tcp следует ввести udp.
  • Устранить конфликты портов. Следует запустить консоль с правами админа, вставить netstat -ano и посмотреть, заняты ли порты 80 и 443. Если они не задействованы, придется перейти по пути HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesHTTPParametersListenOnlyList в редакторе реестра. Теперь в консоли следует ввести net stop http и в параметре реестра ListenOnlyList нужно оставить только 0.0.0.0. Остается только запустить службу повторно net start http. Если порты заняты, нужно их либо освободить, либо переопределить.

Процесс не может получить доступ к файлу

Перечисленных выше действий достаточно, чтобы исправить проблему «Процесс не может получить доступ к файлу». После выполнения процедур удастся либо удалить файл, либо восстановить нормальную работу Windows IIS 6.0 и 7.0.

ошибка торрентаошибка торрентаЕсли вы оказались на этой странице, значит, вам не повезло, и ошибка торрента не даёт скачать раздачу, которую вы так сильно желаете. Возможно, вы приготовили себе вкусный ужин, который хотите съесть за просмотром какого-нибудь фильма или сериала, а он, как назло, не хочет грузиться из-за проклятой ошибки торрент-клиента. Тогда я вам не завидую — ситуация неприятная, и нужно её исправлять, иначе ужин остынет, а вечер будет подпорчен. Я только очень надеюсь, что ваш торрент-клиент выдаёт одну из распространённых ошибок, и мои рекомендации смогут вам помочь.

Самые распространенные ошибки торрент-клиента и методы их исправления:

Ошибка: отказано в доступе write to disk

Причина: У торрент-клиента недостаточно прав для записи на диск.
Как исправить:
— Зайдите в свойства папки, в которую вы скачиваете «проблемный» файл(ы), и уберите галочку с пункта «Только для чтения». Перезапустите торрент-клиент.
— Закройте торрент клиент и откройте свойства его ярлыка. На вкладке «Совместимость» поставьте галку на пункте «Выполнять эту программу от имени администратора».

Ошибка: Системе не удается найти указанный путь

Причина: 1. Папка, в которую вы пытаетесь что-то скачать, не существует, и торрент-клиент не может её создать; 2. Путь к папке слишком длинный и торрент-клиент не может его прочитать (ограничение системы на 255 знаков); 3. Загружаемые файлы были перемещены или удалены.
Как исправить:
— Проверьте наличие папки, в которую загружается раздача. Создайте её, если нужно.
— Позаботьтесь о том, чтобы папка находилась поближе к корневому каталогу (С:Загрузки — к примеру).
— Если вы получаете ошибку «Системе не удается найти указанный путь» при попытке докачать раздачу, которая уже была частично загружена, проверьте на месте ли части файлов и перехешируйте раздачу. Для этого в торрент-клиенте нажмите правой кнопкой мыши по нужной раздаче и выберите «Обновить хеш».
Если ошибка не исчезла, удалите торрент и добавьте его снова. Желательно загружать в отличное от предыдущего место.

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

Причина: Какое-то другое приложение мешает загрузке торрента. Такая ошибка, когда торрент-клиент не может получить доступ к загружаемому файлу, возникает чаще всего из-за процессов, протекающих в самой системе Windows. Обычно это связано с мультимедийными файлами (картинки, видеофайлы и др.). Когда система находит подобные файлы, она добавляет их в свой индекс. Т.е. обращается к файлу, а так как у системы приоритет выше, то uTorrent’у ничего не остаётся, кроме как «жаловаться».
Как исправить:
— Отключите эскизы у файлов и папок. Для этого в меню «Пуск» выберите пункт «Выполнить» или просто нажмите на клавиатуре Win + R. Введите в поле команду control folders и нажмите Ok. Откроются «Параметры папок». На вкладке «Вид» найдите «Всегда отображать значки, а не эскизы», поставьте галочку и подтвердите кнопкой Ok.
— Если ошибка всё ещё возникает, попробуйте добавить торрент-клиент в исключения антивируса.
— Не открывайте файлы/папки до окончания загрузки.

Это были 3 самых распространенных ошибки, которые беспокоят пользователей bittorrent-сетей год за годом. К сожалению, эти ошибки возникают не из-за торрент-клиента как такового, иначе бы их давно исправили. Поэтому даже правильная настройка не спасёт.
На самом же деле ошибок значительно больше, но нет особого смысла их описывать, потому что появляются они исключительно редко. Тем не менее, если у вас возникла какая-то проблема, и вы не можете скачать торрент без ошибок, напишите об этом в комментариях, я обязательно помогу. На этом всё!

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

Список причин сообщения об ошибке доступа к файлу приведен в этом разделе:

  • Административные привилегии. Вы можете увидеть сообщение об ошибке, если основным папкам для доступа к драйверам не предоставлены административные привилегии.

  • Другой процесс использует порт 80 или порт 443. Если какой-либо другой процесс использует диапазон IP-адресов, порт 80 или порт 443, вы можете столкнуться с этим сообщением об ошибке.

  • Неправильно настроен подраздел реестра ListenOnlyList. Подраздел ListenOnlyList и порт IIS могут быть неправильно настроены в редакторе реестра.

Метод 1: основные методы устранения неполадок

Первый способ исправить процесс не может получить доступ к файлу в Windows 10 — попытаться применить основные методы устранения неполадок, приведенные ниже.

1. Закройте фоновые процессы

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

2. Запустите приложение от имени администратора

Сообщение об ошибке может появиться, если приложению не предоставлены права администратора; вы можете исправить ошибку, запустив приложение от имени администратора.

1. Нажмите клавишу Windows, введите «Командная строка» и нажмите «Запуск от имени администратора».

Примечание. Приложение командной строки выбрано в пояснительных целях.

2. Нажмите кнопку «Да» в окне запроса контроля учетных записей, чтобы запустить приложение от имени администратора.

Способ 2: изменить диапазон IP-адресов

Процесс не может получить доступ к файлу. Ошибка может возникнуть, если другие процессы используют порт 80 или порт 443. Вы можете попробовать изменить диапазон IP-адресов процесса или установить другой диапазон IP-адресов, чтобы устранить проблему.

1. Запустите командную строку от имени администратора.

2. Введите следующие команды в приложении и нажмите клавишу Enter, чтобы установить другой диапазон IP-адресов для портов TCP.

netsh int ipv4 set dynamicport tcp start=10000 num=1000

3. Введите следующие команды в приложении и нажмите клавишу Enter, чтобы установить другой диапазон IP-адресов для портов UDP.

netsh int ipv4 set dynamicport udp start=10000 num=1000

Способ 3: разрешить конфликт портов IIS

Сообщение об ошибке, в котором процесс не может получить доступ к файлу, поскольку он используется другим процессом, может появиться в случае конфликта с портом IIS и службой HTTP. Вы можете устранить ошибку, изменив подраздел ListenOnlyList в редакторе реестра.

1. Откройте командную строку от имени администратора.

2. Введите команду netstat –ano и нажмите клавишу Enter, чтобы запустить утилиту Netstat.exe и просмотреть список активных подключений.

3. Введите команду net stop http и нажмите клавишу Enter, чтобы остановить службу HTTP на вашем ПК.

Примечание. Служба HTTP будет использовать порт IIS, поэтому перед изменением ключа необходимо остановить эту службу.

4. Введите Y и нажмите клавишу Enter в окне Продолжить эту операцию?

5. Нажмите клавишу Windows, введите «Редактор реестра» и нажмите «Открыть».

6. Перейдите в каталог ListenOnlyList, используя следующий путь расположения в редакторе реестра.

ComputerHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesHTTPParametersListenOnlyList

7. Щелкните правой кнопкой мыши все IP-адреса по отдельности, отличные от значения по умолчанию 0.0.0.0, и выберите параметр «Удалить», чтобы удалить подраздел.

8. Нажмите кнопку «Да» в окне «Подтвердить удаление значения UAC».

9. Закройте редактор реестра и перезагрузите компьютер.

10. Запустите командную строку, как указано выше, чтобы убедиться, что служба HTTP запущена.

11. Введите команду net start http и нажмите клавишу Enter.

Способ 4: изменить номер порта

Одной из причин, по которой процесс не может получить доступ к файлу в Windows 10, является использование периферийного агента HubCapp. Это стороннее программное обеспечение, которое можно использовать для доступа к драйверам и весам, подключенным к вашему ПК в качестве периферийных устройств. Однако, если номер порта в программном обеспечении конфликтует с другими процессами, вы можете столкнуться с этой ошибкой.

1. Нажмите одновременно клавиши Windows + E, чтобы открыть проводник и перейти к папке периферийного агента HubCapp, используя путь расположения.

C:Program Files (x86)HubCapp Peripheral Agent

Примечание. Перед внесением изменений закройте периферийный агент HubCapp.

2. Дважды щелкните файл setup.xml в списке.

Примечание. Вы также можете создать копию этого файла на рабочем столе и переименовать его в setup.xml_OLD. После изменения файла на рабочем столе вы можете переместить файл в эту папку.

3. Измените значение MinPortNumber с 50000 на 60000 и нажмите клавиши Ctrl+S, чтобы сохранить файл.

4. Откройте периферийный агент HubCapp на своем ПК, чтобы проверить, решена ли проблема.

Часто задаваемые вопросы (FAQ)

Q1. Отвечает ли какое-либо стороннее приложение за сообщение об ошибке доступа к файлу на ПК с Windows 10?

Ответ Периферийный агент HubCapp — это стороннее программное обеспечение, которое может получить доступ к периферийным устройствам, подключенным к вашему ПК. Если номер порта в программном обеспечении настроен неправильно, вы можете увидеть это сообщение об ошибке.

Q2. Почему процесс не может получить доступ к файлу, когда я пытаюсь открыть любое приложение?

Ответ Сообщение об ошибке обычно возникает из-за неправильной настройки номера порта и диапазона IP-адресов. В статье описаны способы изменения номера порта и диапазона IP-адресов для устранения ошибки.

***

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

Когда файл занят каким-то процессом с ним не получится произвести никаких действий, ни изменить, ни удалить. Все дело в том, что система накладывает ограничения на выполнение редактирования файла, так как это, на самом деле, может нанести вред программному обеспечению. При таких обстоятельствах и возникает сообщение об ошибке, которое гласит: «Процесс не может получить доступ к файлу, так как этот файл занят другим процессом». Подумав логически можно сделать вывод: чтобы открыть доступ этому самому процессу, надо освободить файл от другого процесса. А вот с этим сталкивался, наверное, каждый из нас и знает, что сделать это, чаще всего, гораздо сложнее, чем кажется изначально.

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

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

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

1. Unlocker — программа, которая помогает как раз в таких случаях. Она сама находит процессы, которые заняты этим файлом и завершает их. Это можно сделать и без утилиты, только придётся искать в ручную и завершать, а утилита это делает автоматически. Скачав и установив программу, нужно всего лишь нажать ПКМ на файл и выбрать «Unlock»

2. Завершить вручную. Открываем диспетчер задач и разворачиваем список «Подробнее». Из всего большого списка, нужно выбрать только те, которые были запущены Вами. Например, для удаления файла с кэшем браузера, нужно закрыть все задачи браузера. Для этого кликаем правой кнопкой мыши и нажимаем «Завершить задачу».

3. Схитрить с установкой атрибутов. Нажать ПКМ на файл и зайти в свойства. Тут же на вкладке «Общие» поставить галочку напротив поля «Только чтение». Далее перезагрузить компьютер и возможность удаления может появиться.

4. Удалить в безопасном режиме. В безопасном режиме Windows загружает только основные программы нужны для работы системы. Все посторонние остаются отключены, что освобождает файлы от процессов. Для входа в безопасный режим нужно перезагрузить компьютер и во время перезагрузки нажать на клавишу F8 для того, чтобы выбрать вариант запуска системы. На некоторых ПК это может быть другая клавиша. Данный способ довольно часто срабатывает и удалить здесь можно почти любой файл, который не затрагивает работу Windows.

5. Снять защиту на запись. Защита может быть включена как программно, так и механически. Чаще всего это касается SD-карт. На них есть специальный тумблер, который блокирует запись. Программно это выключается через редактор реестра. Для этого нажимаем на Пуск правой кнопкой мыши, выбираем «Выполнить», вводим команду regedit и нажимаем «Ok». Далее нужно найти параметр WriteProtect и установить ему значение 0.

Часто такая же проблема, когда процесс не может получить доступ, может выскочить при выполнении команды netsh в командной строке или при настройке сайта IIS. Тут может быть несколько причин:

1. Неправильная настройка реестра.

2. Попытка подключения к портам 80 и 443, когда они заняты. 

3. Не хватает прав для выполнения действия.

А решить проблему можно так:

1. Запустить cmd от имени администратора. Сделать это можно в меню Пуск с помощью правой кнопки мыши.

2. Поменять пул IP-адресов. Выполнить команду netsh int ipv4 set dynamicport tcp start=10000 num=1000. Затем такую netsh int ipv4 set dynamicport udp start=10000 num=1000.

3. Удалить конфликт портов. От имени администратора запустить командную строку, прописать netstat -ano и посмотреть не заняты ли порты 80 и 443. Если порты свободны, то идём в реестр по пути: 

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesHTTPParametersListenOnlyList 

Далее в cmd вводим net stop http и в параметре реестра ListenOnlyList нужно оставить одни 0.0.0.0. Далее опять в консоли пишем net start http. Если порты в итоге заняты, то их нужно или освободить или переопределить.

С помощью таких манипуляций можно справиться с ошибкой «Процесс не может получить доступ к файлу» и удалить файл.

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

PermissionError: [WinError 32] The process cannot access the file because it is being used by another process:’minicube_HE022222.fits’

Так что каждый раз мне приходится менять имя файла подгонки, и тогда ошибок нет. Просто очень неприятно менять имя файла каждый раз, когда я запускаю код. Вот мой фрагмент кода:

Я получаю сообщение об ошибке:

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

Вот еще одна часть кода, в которой возникает эта ошибка:

Ошибка возникает только в «xxx.writeto». Если есть другой способ записи в файл или обновления существующего файла новыми данными, сообщите мне. Спасибо

В общем, модель ввода-вывода Windows требует совместного доступа на чтение / выполнение, запись / добавление и удаление файлов, то есть все объекты File с доступом к данным должны взаимодействовать друг с другом. Сам Windows Python предоставляет доступ для чтения и записи, но не для удаления. Я не знаю, что делает fits или почему файл остается открытым после выхода из сценария, но вы захотите поискать вызовы CreateFile . В частности, ищите доступ, который они запрашивают (например, GENERIC_READ или DELETE ), и доступ, которым они делятся (например, FILE_SHARE_READ ).

Краткое мета-примечание: в StackOverflow вы можете форматировать блоки кода, делая отступ в каждой строке на четыре пробела. Обратные кавычки предназначены только для форматирования слов в парграфе как код like this . Я почистил для вас форматирование. См. stackoverflow.com/editing-help#code

Откуда берутся массивы mini_data и mini_error ?

Формы c голосовым вводом в React с помощью Speechly

Flatpickr: простой модуль календаря для вашего приложения на React

Что такое cURL в PHP? Встроенные функции и пример GET запроса

Ответы 1

Как отмечает этот комментарий, способ работы файлового ввода-вывода в Windows таков, что вы не можете перезаписать файл, если этот файл уже открыт в другом процессе. Вы пишете этот файл и открываете его в другой программе? Если у вас есть этот файл, открытый в любой другой программе, вы не сможете его перезаписать.

Вам нужно иметь возможность обновлять файл на месте, пока он открыт в другой программе? Если это так, это все еще возможно, но вы не можете использовать HDUList.writeto() , поскольку он эффективно удаляет существующий файл и заменяет его новым (вместо обновления существующего файла на месте).

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

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

Помимо одного небольшого использования:

new_hdu.close() в вашем примере на самом деле ничего не делает. Метод HDUList.close() имеет смысл только тогда, когда вы открываете существующий файл FITS с диска. Здесь вы создаете HDUList (структура данных, представляющая файл FITS) в памяти и вызываете высокоуровневый HDUList.writeto() , который открывает файл, записывает данные в памяти в этот файл и закрывает файл. Так что .close() в этом случае не работает. Я предполагаю, что, возможно, вы добавили его, чтобы попытаться решить свою проблему, но на самом деле это не актуально.

Да, я новичок в этом, поэтому я пытался как-то закрыть его с помощью hdu.close (), который, как вы сказали, не работает. В любом случае, я запускаю код в скрипте на Spyder. Такая же ошибка возникает, когда ничего, кроме Spyder, тоже не открыто. Я мог бы добавить что-нибудь к имени, но это просто продолжит создавать новые файлы, чего я пытаюсь избежать.

Как вы работаете в контексте Spyder? Я думаю, вам нужно обновить свой вопрос, добавив более подробную информацию и / или посмотреть, какие другие процессы обращаются к этим файлам (если, например, файл находится в каталоге, отслеживаемом Dropbox или Google Диском, или если он сканируется вирусом сканер, который тоже может вызвать это).

Все хорошо, исправил. Я просто передаю ошибку сейчас и работаю каждый раз. Спасибо.

Вот что я делаю. Сработает ли это? попробуйте: hdu.writeto (‘filename.fits’, overwrite = True) except PermissionError: pass

Что ж, если вы получаете исключение, это означает, что вы на самом деле ничего не писали. У вас все еще есть что-то, что оставляет файл открытым где-то .

Возможно, вам поможет, если вы покажете больше своего кода. Понятно, что вы не опубликовали свой полный код.

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

Вы уверены, что у вас нет антивирусного сканера, Dropbox или чего-то еще, имеющего доступ к файлам? Единственный ответ, который я могу вам дать, это то, что какой-то другой процесс в вашей системе обращается к этим файлам, когда вы пытаетесь писать в них.

Я также сталкивался с этой проблемой раньше с помощью программного обеспечения для автоматического резервного копирования (например, аварийного плана).

PermissionError: [WinError 32] Процесс не может получить доступ к файлу, потому что он используется другим процессом.

Просто чтобы подтвердить, Python — единственная программа, работающая на моем компьютере. Что вызывает эту проблему и как ее исправить?

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

Я не знаю, поддерживает ли PIL with контексты, но если да:

Это обязательно удалит im (и закроет файл), прежде чем вы доберетесь до os.remove .

Если это не так, вы можете попробовать Pillow, поскольку разработка PIL практически мертва.

PermissionError: [WinError 32] The process cannot access the file because it is being used by another process

Just to confirm, Python is the only program running on my computer. What is causing this problem and how do I fix it?

user avatar

5 Answers 5

Your process is the one that has the file open (via im still existing). You need to close it first before deleting it.

I don’t know if PIL supports with contexts, but if it did:

This will make sure to delete im (and close the file) before you get to os.remove .

If it doesn’t you might want to check out Pillow, since PIL development is pretty much dead.

Понравилась статья? Поделить с друзьями:
  • Error при создании приложения telegram
  • Error перезагрузите страницу или нажмите кнопку обновить чат рулетка
  • Error ошибки популярные
  • Error ошибка сопоставление пользователя для postgres не найдено
  • Error ошибка приложения list index out of bounds 0