Невозможно удалить файл или папку на томе файловой системы NTFS.

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

Применяется к: Windows Server 2012 R2
Исходный номер базы знаний: 320081

Примечание.

Внутренне NTFS обрабатывает папки как особый тип файлов. Таким образом, файл word в этой статье указывает на файл или папку.

Причина 1. Файл использует ACL

Невозможно удалить файл, если он использует список контроль доступа (ACL). Чтобы устранить эту проблему, измените разрешения для файла. Для изменения разрешений может потребоваться взять на себя ответственность за файлы.

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

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

Чтобы обойти эту проблему, используйте другое средство (например, более позднюю сборку Cacls.exe).

Записи контроль доступа (ACE) в списке ACL имеют определенную предпочтительную последовательность в зависимости от их типа. Например, ACE, которые запрещают доступ, обычно поступают перед ACE, которые предоставляют доступ. Однако ничто не мешает программе написать список ACL с acEs в любой произвольной последовательности. В некоторых более ранних версиях Windows возникали проблемы, когда Windows пыталась считывать эти неканонические списки управления доступом. Иногда вы не можете правильно изменить эти списки управления доступом с помощью графического редактора безопасности Microsoft Windows Обозреватель. Эта проблема устранена в более поздних версиях Windows. Если у вас возникла эта проблема, используйте последнюю версию Cacls.exe. Даже если вам не удается отобразить или изменить список ACL на месте, вы можете написать новый список ACL, чтобы получить доступ к файлу.

Причина 2. Используемый файл

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

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

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

Причина 3. Повреждение файловой системы препятствует доступу к файлу

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

Следующие причины могут привести к повреждению файловой системы и переводу файлов в проблемное состояние:

  • Недопустимые секторы на диске
  • Другое неисправное оборудование
  • Ошибки программного обеспечения

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

Причина 4. Файлы существуют по путям, которые глубже MAX_PATH символов

При возникновении проблем с путем к файлу невозможно открыть, изменить или удалить файл.

Решение 1. Использование автоматически созданного имени 8.3 для доступа к файлу

Чтобы устранить эту проблему, может потребоваться использовать автоматически созданное имя 8.3 для доступа к файлу. Это разрешение может быть самым простым, если путь глубокий, так как имена папок слишком длинные. Если путь 8.3 также слишком длинный или имена 8.3 отключены на томе, перейдите к решению 2. Дополнительные сведения об отключении имен файлов версии 8.3 на томах NTFS см. в статье Отключение создания имен 8.3 в разделах NTFS.

Решение 2. Переименование или перемещение глубокой папки

Переименуйте папку, чтобы конечные файлы, которые глубже, больше не существовали MAX_PATH . В этом случае начните с корневой папки или в любом другом удобном месте. Затем переименуйте папки, чтобы они имели более короткие имена. Если этот шаг не устранит эту проблему, например, если файл содержит более 128 папок, перейдите к решению 4.

Решение 3. Сопоставление диска с папкой в структуре пути

Сопоставьте диск с папкой внутри структуры пути к целевому файлу или папке. Этот метод сокращает виртуальный путь.

Например, предположим, что у вас есть путь, структурированный следующим образом:

\\ServerName\SubfolderName1\SubfolderName2\SubfolderName3\SubfolderName4\...

В этом пути общее число символов превышает 255 символов. Чтобы упростить длину этого пути до 73 символов, сопоставьте диск с subfolderName4.

Решение 4. Используйте сетевую папку с такой же глубиной, как папка

Если решения 1, 2 и 3 не удобны или не устраняют проблему, создайте сетевую папку, которая находится как можно глубже в дереве папок. Затем переименуйте папки, перейдя к общей папке.

Решение 5. Использование средства, которое может проходить по глубоким путям

Многие программы Windows ожидают, что максимальная длина пути будет короче 255 символов. Эти программы выделяют только достаточно внутреннего хранилища для обработки этих типичных путей. NTFS не имеет этого ограничения и может содержать гораздо больше путей.

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

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

Причина 5. Имя файла содержит зарезервированное имя в пространстве имен Win32.

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

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

Если открыть дескриптор файла с помощью типичного механизма Win32 CreateFile, некоторые имена файлов зарезервированы для устройств DOS старого стиля. Для обратной совместимости эти имена файлов не разрешены, и их нельзя создать с помощью типичных вызовов файлов Win32. Эта проблема не является ограничением NTFS.

Программу Win32 можно использовать для обхода типичных проверок имен, выполняемых при создании или удалении файла, с помощью того же метода, который используется для обхода папок глубже, чем MAX_PATH. Кроме того, некоторые средства POSIX не подлежат этим проверкам имен.

Причина 6. Имя файла содержит недопустимое имя в пространстве имен Win32.

Невозможно удалить файл, если имя файла содержит недопустимое имя. Например, имя файла имеет конечный пробел или конечный период, или имя файла состоит только из пробела. Чтобы устранить эту проблему, используйте средство, которое использует соответствующий внутренний синтаксис для удаления файла. Для работы с этими файлами можно использовать "\\?\" синтаксис с некоторыми инструментами. Пример:

del "\\?\c:\<path_to_file_that contains a trailing space.txt>"

Причина этой проблемы аналогична причине 4. Если вы используете типичный синтаксис Win32, чтобы открыть файл с конечными пробелами или конечными точками в имени, конечные пробелы или точки удаляются перед фактическим открытием файла. Например, в одной папке есть два файла с именами AFile.txt и AFile.txt , запишите пробел после имени файла. Если вы попытаетесь открыть второй файл с помощью стандартных вызовов Win32, вы откроете первый файл. Аналогичным образом, если у вас есть файл, имя которого является просто пробелом, и вы пытаетесь открыть его с помощью стандартных вызовов Win32, откройте родительскую папку файла. В этом случае, если вы попытаетесь изменить параметры безопасности для этих файлов, вы не сможете это сделать, или вы можете неожиданно изменить параметры для разных файлов. Если это происходит, вы можете подумать, что у вас есть разрешение на доступ к файлу, который на самом деле имеет ограничивающий список ACL.

Сочетания причин

Иногда могут возникать сочетания этих причин. Это может сделать процедуру удаления файла более сложной. Например, при входе в систему от имени администратора компьютера может возникнуть сочетание причины 1 (у вас нет разрешений на удаление файла) и причины 5 (имя файла содержит конечный символ, который приводит к перенаправлению доступа к файлу в другой или несуществующий файл), и вы не сможете удалить файл. Если вы попытаетесь устранить причину 1 , взяв на себя ответственность за файл и добавив разрешения, вы по-прежнему не сможете удалить файл, так как редактор ACL в пользовательском интерфейсе не может получить доступ к соответствующему файлу из-за причины 6.

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

subinacl /onlyfile "\\?\c:\<path_to_problem_file>" /setowner= domain\administrator /grant= domain\administrator=F

Примечание.

Эта команда представляет собой одну командную строку, которая была упакована для удобства чтения.

Этот пример командной C:\<path_to_problem_file> строки изменяет файл, содержащий конечный пробел, чтобы учетная запись домена\администратора была владельцем файла и эта учетная запись имеет полный контроль над файлом. Теперь этот файл можно удалить с помощью команды Del с тем же "\\?\" синтаксисом.