#Что означает ошибка
Ошибка 0x80070004 системе не удаётся открыть файл (слишком много открытых файлов)
Ошибка 0x80070004 соответствует ERROR_TOO_MANY_OPEN_FILES: процесс исчерпал лимит открытых дескрипторов файлов. Это либо утечка в программе, либо слишком большое число одновременно открытых документов.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Утечка дескрипторовПрограмма не закрывает файлы. | Ошибка со временем. Сопоставьте время появления ошибки с последними изменениями системы и параметрами текущей учётной записи. | Перезапустите программу. |
| Слишком много файлов открытоАрхиватор, копирование. | Ошибка при массовых операциях. Сверьте точное имя и расположение файла; попробуйте действие на копии без изменения исходника. | Выполняйте порциями. |
| Антивирус открывает много файлов | Ошибка при нагрузке. Откройте журнал защиты и найдите запись с тем же временем. Не отключайте защиту: сначала проверьте источник файла или правило блокировки. | Проверить журнал событий без отключения защиты. |
| Ограничения службы | Ошибка на сервере. Сопоставьте запись в журнале службы со временем ошибки и проверьте, не занят ли требуемый порт другим процессом. | Проверить реальное число дескрипторов и логи службы; не менять лимиты без подтверждения. |
#Пошаговое решение
- Найдите процесс, которому не удаётся открыть файлыКод
0x80070004соответствует ERROR_TOO_MANY_OPEN_FILES, а текст системы может быть «Системе не удаётся открыть файл». Запишите программу, время, число одновременно открытых документов и операцию. Это не означает автоматически, что на компьютере нужно увеличивать глобальный лимит файлов. - Проверьте, воспроизводится ли проблема при меньшей нагрузкеСохраните документы и закройте ненужные окна проблемной программы обычным способом. При массовом импорте разбейте операцию на небольшие партии, если приложение это позволяет, и проверьте одну партию. Если такая проверка успешна, причина может быть в длительно открытых дескрипторах программы или слишком высокой параллельности; не удаляйте исходные файлы.
- Посмотрите потребление дескрипторов процессаНажмите Ctrl+Shift+Esc → «Диспетчер задач» → «Подробности». При наличии настройки столбцов нажмите правой кнопкой по заголовку → «Выбрать столбцы» → включите «Дескрипторы» (Handles). Найдите процесс по имени и посмотрите, растёт ли показатель при повторении одной и той же операции. Это диагностический признак, а не доказательство утечки; запишите данные и время.
- Обновите или восстановите только проблемную программуЕсли один процесс постоянно наращивает число дескрипторов, сохраните все открытые файлы, закройте его штатно и откройте вновь. Проверьте обновление через меню приложения или официальный сайт. Если проблема возвращается, передайте разработчику шаги воспроизведения и значение счётчика Handles; перезапуск даёт лишь временный эффект.
- Для службы используйте журналы и контролируемое обслуживаниеЕсли ошибка появляется на сервере или в службе, администратор проверяет журнал именно этой службы и число дескрипторов её процесса. Не меняйте реестр и не увеличивайте «лимиты Windows» по общему совету; сначала подтвердите реальный предел или утечку по документации приложения. Запланированная перезагрузка службы может разорвать соединения и должна быть согласована.
- Проверьте обычную нагрузкуПовторите исходную операцию и убедитесь, что файлы открываются без ошибки; если сбой возникает снова по мере работы, сохраните показатели из диспетчера задач и обратитесь к разработчику. Отключение антивируса не является стандартным методом устранения этой ошибки.
#Проверка результата
Повторите исходную операцию с тем же файлом, программой или параметром. Убедитесь, что код из сообщения «Ошибка 0x80070004 в Windows: системе не удаётся открыть файл (слишком много открытых файлов)» больше не появляется. Если возник другой код, запишите его отдельно: это может указывать на новую причину.