Поделиться через


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

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

Исходный номер базы знаний: 320081

Примечание.

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

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

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

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

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

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

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

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

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

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

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

Причина 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, определенные имена файлов зарезервированы для старых устройств 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 с тем же "\\?\" синтаксисом.