Você não pode excluir um arquivo ou uma pasta em um volume do sistema de arquivos NTFS

Este artigo descreve por que não é possível excluir um arquivo ou uma pasta em um volume do sistema de arquivos NTFS. Ele também fornece ajuda para resolver esse problema.

Aplica-se a: Windows Server 2012 R2
Número de KB original: 320081

Observação

Internamente, o NTFS trata as pastas como um tipo especial de arquivo. Portanto, o arquivo de palavras neste artigo indica um arquivo ou uma pasta.

Causa 1: o arquivo usa uma ACL

Você não poderá excluir um arquivo se o arquivo usar uma ACL (Lista de Controle de Acesso). Para resolve esse problema, altere as permissões no arquivo. Talvez seja necessário tomar a propriedade dos arquivos para alterar as permissões.

Os administradores têm a capacidade implícita de assumir a propriedade de qualquer arquivo, mesmo que não tenham recebido explicitamente qualquer permissão para o arquivo. Os proprietários de arquivos têm a capacidade implícita de modificar permissões de arquivo, mesmo que não tenham permissões explicitamente concedidas ao arquivo. Portanto, você pode ter que assumir a propriedade de um arquivo, dar a si mesmo permissões para excluir o arquivo e, em seguida, excluir o arquivo.

Você não pode usar determinadas ferramentas de segurança para exibir ou modificar permissões porque o arquivo tem uma ACL não canônica

Para contornar esse problema, use outra ferramenta (por exemplo, um build posterior de Cacls.exe).

As ACEs (Entradas Controle de Acesso) em uma ACL têm uma determinada sequência preferencial, dependendo do tipo. Por exemplo, ACEs que negam o acesso normalmente vêm antes de ACEs que concedem acesso. No entanto, nada impede que um programa escreva uma ACL que tenha ACEs em qualquer sequência arbitrária. Em algumas versões anteriores do Windows, ocorreram problemas quando o Windows tentou ler essas ACLs não canônicas. Às vezes, você não pode modificar essas ACLs corretamente usando o editor de segurança gráfica do Microsoft Windows Explorer. Esse problema foi corrigido em versões posteriores do Windows. Se você tiver esse problema, use a versão mais recente do Cacls.exe. Mesmo que você não possa exibir ou editar uma ACL no local, você pode escrever uma nova ACL para obter acesso ao arquivo.

Causa 2: o arquivo está sendo usado

Não é possível excluir um arquivo se o arquivo estiver sendo usado. Para resolve esse problema, determine o processo que tem o identificador aberto e feche esse processo.

Dependendo de como o arquivo é aberto, talvez você não seja capaz de excluir um arquivo que está em uso. Por exemplo, o arquivo está aberto para acesso exclusivo em vez de acesso compartilhado. Você pode usar várias ferramentas para determinar os processos que têm identificadores abertos para arquivos sempre que desejar.

Os sintomas desse problema podem variar. Você pode usar o comando Excluir para excluir um arquivo. Mas o arquivo não é excluído até que o processo que tem o arquivo aberto libere o arquivo. Além disso, talvez você não possa acessar a caixa de diálogo Segurança para um arquivo que está pendente de exclusão. Para resolve esse problema, determine o processo que tem o identificador aberto e feche esse processo.

Causa 3: a corrupção do sistema de arquivos está impedindo o acesso ao arquivo

Não é possível excluir o arquivo se o sistema de arquivos estiver corrompido. Para resolve esse problema, execute o utilitário Chkdsk no volume de disco para corrigir quaisquer erros.

Os seguintes motivos podem corromper o sistema de arquivos e colocar arquivos em um estado problemático:

  • Setores ruins no disco
  • Outro hardware com falha
  • Bugs de software

As operações típicas podem falhar de várias maneiras. Quando o sistema de arquivos detecta corrupção, ele registra um evento no log de eventos e normalmente você recebe uma mensagem que solicita que você execute o Chkdsk. Dependendo da natureza da corrupção, o Chkdsk pode ou não recuperar dados de arquivo. No entanto, o Chkdsk retorna o sistema de arquivos a um estado internamente consistente.

Causa 4: existem arquivos em caminhos mais profundos que MAX_PATH caracteres

Não é possível abrir, editar ou excluir um arquivo se houver problemas com o caminho do arquivo.

Resolução 1: usar um nome 8.3 gerado automaticamente para acessar o arquivo

Para resolve esse problema, talvez você queira usar o nome 8.3 gerado automaticamente para acessar o arquivo. Essa resolução pode ser a resolução mais fácil se o caminho for profundo porque os nomes da pasta são muito longos. Se o caminho 8.3 também for muito longo ou se 8.3 nomes tiverem sido desabilitados no volume, vá para a Resolução 2. Para obter mais informações sobre como desabilitar nomes de arquivo 8.3 em volumes NTFS, consulte Como desabilitar a criação de nome 8.3 em partições NTFS.

Resolução 2: renomear ou mover uma pasta profunda

Renomeie a pasta para que os arquivos de destino mais profundos do que os MAX_PATH não existam mais. Se você fizer isso, comece na pasta raiz ou em qualquer outro local conveniente. Em seguida, renomeie pastas para que elas tenham nomes mais curtos. Se essa etapa não resolve esse problema, por exemplo, se um arquivo tiver mais de 128 pastas de profundidade, vá para a Resolução 4.

Resolução 3: mapear uma unidade para uma pasta na estrutura do caminho

Mapeie uma unidade para uma pasta dentro da estrutura do caminho do arquivo ou pasta de destino. Esse método encurta o caminho virtual.

Por exemplo, suponha que você tenha um caminho estruturado da seguinte maneira:

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

Nesse caminho, a contagem total de caracteres é superior a 255 caracteres. Para encurtar o comprimento desse caminho, para 73 caracteres, mapeie uma unidade para SubfolderName4.

Resolução 4: use um compartilhamento de rede tão profundo quanto a pasta

Se as resoluções 1, 2 e 3 não forem convenientes ou não resolve o problema, crie um compartilhamento de rede que seja o mais profundo possível na árvore de pastas. Em seguida, renomeie as pastas acessando o compartilhamento.

Resolução 5: usar uma ferramenta que pode percorrer caminhos profundos

Muitos programas do Windows esperam que o comprimento máximo do caminho seja menor que 255 caracteres. Esses programas alocam apenas armazenamento interno suficiente para lidar com esses caminhos típicos. O NTFS não tem esse limite e pode conter caminhos muito mais longos.

Você poderá enfrentar esse problema se criar um compartilhamento em algum momento da estrutura da pasta que já é bastante profundo e criar uma estrutura profunda abaixo desse ponto usando o compartilhamento. Algumas ferramentas que operam localmente na árvore de pastas podem não ser capazes de atravessar toda a árvore a partir da raiz. Talvez você precise usar essas ferramentas de maneira especial para que elas possam percorrer o compartilhamento. A documentação da API CreateFile descreve um método para percorrer toda a árvore nessa situação.

Normalmente, você pode gerenciar arquivos usando o software que os cria. Se você tiver um programa que possa criar arquivos mais profundos do MAX_PATHque , normalmente você pode usar esse mesmo programa para excluir ou gerenciar os arquivos. Normalmente, você pode excluir arquivos criados em um compartilhamento usando o mesmo compartilhamento.

Causa 5: o nome do arquivo inclui um nome reservado no espaço de nome Win32

Se o nome do arquivo incluir um nome reservado no espaço de nome do Win32, como lpt1, você não poderá excluir o arquivo. Para resolve esse problema, use um programa não Win32 para renomear o arquivo. Você pode usar uma ferramenta POSIX ou qualquer outra ferramenta que use a sintaxe interna apropriada para usar o arquivo.

Além disso, você pode usar alguns comandos internos para ignorar as verificações de nome reservadas típicas do Win32 se você usar uma sintaxe específica para especificar o caminho do arquivo.

Se você abrir um identificador em um arquivo usando o mecanismo típico Win32 CreateFile, certos nomes de arquivo serão reservados para dispositivos DOS de estilo antigo. Para compatibilidade com versões anteriores, esses nomes de arquivo não são permitidos e não podem ser criados usando chamadas típicas de arquivo Win32. Esse problema não é uma limitação do NTFS.

Você pode usar um programa Win32 para ignorar as verificações de nome típicas que são feitas quando um arquivo é criado ou excluído usando a mesma técnica que você usa para percorrer pastas mais profundas que MAX_PATH. Além disso, algumas ferramentas POSIX não estão sujeitas a essas verificações de nome.

Causa 6: o nome do arquivo inclui um nome inválido no espaço de nome do Win32

Você não poderá excluir um arquivo se o nome do arquivo incluir um nome inválido. Por exemplo, o nome do arquivo tem um espaço à direita ou um período à direita ou o nome do arquivo é composto apenas por um espaço. Para resolve esse problema, use uma ferramenta que usa a sintaxe interna apropriada para excluir o arquivo. Você pode usar a "\\?\" sintaxe com algumas ferramentas para operar nesses arquivos. Veja um exemplo:

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

A causa desse problema é semelhante à Causa 4. Se você usar a sintaxe típica do Win32 para abrir um arquivo que tenha espaços à direita ou períodos à direita em seu nome, os espaços ou períodos à direita serão removidos antes que o arquivo real seja aberto. Por exemplo, você tem dois arquivos na mesma pasta nomeada AFile.txt e AFile.txt , observe o espaço após o nome do arquivo. Se você tentar abrir o segundo arquivo usando chamadas padrão do Win32, abra o primeiro arquivo. Da mesma forma, se você tiver um arquivo cujo nome seja apenas um caractere de espaço e tentar abri-lo usando chamadas padrão do Win32, abra a pasta pai do arquivo. Nessa situação, se você tentar alterar as configurações de segurança nesses arquivos, talvez não seja capaz de fazê-lo ou poderá alterar inesperadamente as configurações em arquivos diferentes. Se esse comportamento ocorrer, você pode achar que tem permissão para um arquivo que realmente tem uma ACL restritiva.

Combinações de causas

Às vezes, você pode experimentar combinações dessas causas. Ele pode tornar o procedimento para excluir um arquivo mais complexo. Por exemplo, se você fizer logon como administrador do computador, poderá experimentar uma combinação de Causa 1 (você não tem permissões para excluir um arquivo) e Cause 5 (o nome do arquivo contém um caractere à direita que faz com que o acesso ao arquivo seja redirecionado para um arquivo diferente ou inexistente) e você não pode excluir o arquivo. Se você tentar resolve Causa 1 tomando a propriedade do arquivo e adicionando permissões, você ainda pode não ser capaz de excluir o arquivo, pois o editor ACL na interface do usuário não pode acessar o arquivo apropriado devido à Causa 6.

Nessa situação, você pode usar o utilitário Subinacl com a opção /onlyfile (esse utilitário está incluído no Kit de Recursos) para alterar a propriedade e as permissões em um arquivo que de outra forma é inacessível. Veja um exemplo:

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

Observação

Esse comando é uma única linha de comando que foi encapsulada para legibilidade.

Essa linha de comando de exemplo modifica o C:\<path_to_problem_file> arquivo que contém um espaço à direita para que a conta domain\administrator seja o proprietário do arquivo e essa conta tenha controle total sobre o arquivo. Agora você pode excluir esse arquivo usando o comando Del com a mesma "\\?\" sintaxe.