Compartilhar via


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.

Número original do KB: 320081

Observação

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

Causa 1: o arquivo usa uma ACL

Você não poderá excluir um arquivo se ele usar uma lista de controle de acesso (ACL). Para resolver esse problema, altere as permissões no arquivo. Talvez seja necessário apropriar-se dos arquivos para alterar as permissões.

Os administradores têm a capacidade implícita de se apropriar de qualquer arquivo, mesmo que não tenham recebido explicitamente nenhuma permissão para o arquivo. Os proprietários de arquivos têm a capacidade implícita de modificar as permissões de arquivo, mesmo que não recebam explicitamente nenhuma permissão para o arquivo. Portanto, talvez seja necessário apropriar-se de um arquivo, conceder a si mesmo permissões para excluí-lo e, em seguida, excluí-lo.

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, uma compilação posterior do Cacls.exe).

As entradas de controle de acesso (ACEs) em uma ACL têm uma determinada sequência preferencial, dependendo do tipo. Por exemplo, as ACEs que negam acesso normalmente vêm antes das 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, ocorriam problemas quando o Windows tentava 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 gravar uma nova ACL para obter acesso ao arquivo.

Causa 2: O arquivo está sendo usado

Você não pode excluir um arquivo se ele estiver sendo usado. Para resolver esse problema, determine o processo que tem o identificador aberto e feche esse processo.

Dependendo de como o arquivo é aberto, talvez você não consiga 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 quiser.

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 consiga acessar a caixa de diálogo Segurança de um arquivo que está pendente de exclusão. Para resolver 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

Você não pode excluir o arquivo se o sistema de arquivos estiver corrompido. Para resolver esse problema, execute o utilitário Chkdsk no volume do disco para corrigir quaisquer erros.

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

  • Setores defeituosos no disco
  • Outro hardware defeituoso
  • 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 você normalmente recebe uma mensagem solicitando que você execute o Chkdsk. Dependendo da natureza da corrupção, o Chkdsk pode ou não recuperar os dados do arquivo. No entanto, o Chkdsk retorna o sistema de arquivos para um estado internamente consistente.

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

Você não pode 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 resolver 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 das pastas são muito longos. Se o caminho 8.3 também for muito longo ou se os nomes 8.3 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 nomes 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 o MAX_PATH não existam mais. Se você fizer isso, comece na pasta raiz ou em qualquer outro local conveniente. Em seguida, renomeie as pastas para que tenham nomes mais curtos. Se esta etapa não resolver 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: Usar 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 resolverem o problema, crie um compartilhamento de rede o mais profundo possível na árvore de pastas. Em seguida, renomeie as pastas acessando o compartilhamento.

Resolução 5: Use uma ferramenta que possa 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ê pode enfrentar esse problema se criar um compartilhamento em algum ponto da estrutura de pastas que já seja bastante profundo e, em seguida, 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 percorrer toda a árvore a partir da raiz. Talvez seja necessário usar essas ferramentas de uma 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 que MAX_PATHo , normalmente poderá 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 nomes do 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 resolver 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 típicas de nome reservado do Win32 se usar uma sintaxe específica para especificar o caminho do arquivo.

Se você abrir um identificador para um arquivo usando o mecanismo Win32 CreateFile típico, determinados 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 de arquivo Win32 típicas. 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 pode 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 ponto à direita, ou o nome do arquivo é composto apenas por um espaço. Para resolver esse problema, use uma ferramenta que use 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 pontos à direita em seu nome, os espaços à direita ou pontos serão removidos antes que o arquivo real seja aberto. Por exemplo, você tem dois arquivos na mesma pasta chamados AFile.txt e AFile.txt , observe o espaço após o nome do arquivo. Se você tentar abrir o segundo arquivo usando chamadas Win32 padrão, abra o primeiro arquivo. Da mesma forma, se você tiver um arquivo cujo nome é apenas um caractere de espaço e tentar abri-lo usando chamadas Win32 padrão, abra a pasta pai do arquivo. Nessa situação, se você tentar alterar as configurações de segurança nesses arquivos, talvez não consiga fazer isso ou poderá alterar inesperadamente as configurações em arquivos diferentes. Se esse comportamento ocorrer, você poderá pensar 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. Isso 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 Causa 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 não poderá excluir o arquivo. Se você tentar resolver a Causa 1 assumindo a propriedade do arquivo e adicionando permissões, talvez ainda não consiga excluir o arquivo, pois o editor de 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 /onlyfile opção (esse utilitário está incluído no Resource Kit) para alterar a propriedade e as permissões em um arquivo que, de outra forma, ficaria inacessível. Veja um exemplo:

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

Observação

Este comando é uma única linha de comando que foi encapsulada para facilitar a leitura.

Esta linha de comando de exemplo modifica o C:\<path_to_problem_file> arquivo que contém um espaço à direita para que a conta domínio\administrador seja a proprietária 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.