Por que o Windows está relatando essa pasta é muito longa para copiar?
Se você trabalha com o Windows por tempo suficiente, especialmente com pastas e arquivos com nomes longos, você se depara com um erro bizarro: o Windows informará que o caminho da pasta ou o nome do arquivo é muito longo para ir para um novo destino ou até mesmo excluir. Qual é o negócio?
Ei How-To Geek!
Então, no outro dia, eu estava reorganizando alguns arquivos no meu computador, criando pastas, esse tipo de coisa. Então, quando eu estava movendo alguns arquivos para uma pasta, recebi uma mensagem dizendo que o caminho da pasta resultante seria muito longo. Eu estava confuso. Eu sei que cada sistema operacional desde o DOS suporta nomes extensos de arquivos, mas o Windows afirma que o caminho é muito longo? Por que isso acontece?
Sinceramente,
Sr. desorganizado
O problema que você está enfrentando é uma infeliz interseção de dois sistemas que, em casos como esse, produz um erro. Para entender exatamente de onde vem o erro, precisamos nos aprofundar no histórico dos Long Filenames (LFN) e como o Windows interage com eles antes de nos aprofundarmos nas soluções..
Nomes de arquivo longos foram introduzidos, através da arquitetura do MS-DOS subjacente, no Windows 95. O novo sistema LFN permitido para nomes de arquivo e diretório de até 255 caracteres. Esta foi uma expansão bem-vinda do sistema de nomes de arquivos anterior, geralmente chamado 8.3 nomes de arquivos porque o nome estava limitado a oito caracteres e uma extensão de três dígitos, mas também conhecido como Nome de Arquivo Curto (SFN). Como você pode imaginar, naquela época ainda existiam muitos aplicativos baseados em DOS e havia mais do que algumas dores de cabeça tentando fazer com que os novos LFNs e os SFNs legados jogassem bem uns com os outros. Se você já se deparou com um disquete ou CD-ROM antigo com arquivos estranhamente truncados (como abcdef ~ 1.txt), esse nome de arquivo foi cortado por algum aplicativo legado usando SFN de algum LFN mais longo e sem suporte (como abcdefghijk. TXT).
Estamos muito longe de meados da década de 1990, no entanto, e toda a coisa Long Filename é (na maior parte) firmemente resolvida. Se você estiver executando uma versão do Windows dos últimos 10 anos, provavelmente você nunca se deparará com um conflito de tamanho de nome de arquivo como nós costumávamos encontrar nos dias do DOS / Windows 95. Dito isso, ainda encontramos soluços, como você descobriu com o seu projeto de limpeza de disco. Mas por que? Se o sistema de nome de arquivo longo do Windows oferecer suporte a pastas e nomes de arquivo de até 255 caracteres por componente, em qual parede você está executando? Não podemos culpar o NTFS (o sistema de arquivos que a grande maioria das máquinas modernas do Windows usa) como NTFS suportará um encadeamento de pastas e nomes de arquivos até um comprimento total do caminho de 32.767 caracteres. Isso excede em muito a estrutura típica de diretórios que a maioria dos usuários precisaria.
Onde tudo desmorona é uma restrição artificial do Windows empilha sobre o sistema LFN / NTFS: a variável MAX_PATH. A variável MAX_PATH especifica que uma estrutura de diretório completa no Windows não pode exceder o total de 260 caracteres, incluindo a letra da unidade, dois-pontos, barra invertida e folga nula no final. Assim, você só tem um potencial MAX_PATH real de 256 caracteres, por exemplo. C: \ seu caminho de 256 caracteres \.
Então, o que aconteceu quando você estava limpando seu computador é que você tinha um diretório com um caminho já longo (porque os nomes das pastas eram longos, os nomes dos arquivos eram longos, ou ambos), e quando você tentou mover um ou mais esses diretórios em outro diretório com um caminho longo, o comprimento total do nome do caminho excedeu o limite de 260 caracteres imposto pela variável MAX_PATH.
Agora você pode estar pensando “Ah-hah! Vamos apenas mudar a variável MAX_PATH e resolver o problema! ”Infelizmente, não é tão simples assim. Não apenas a variável MAX_PATH é essencialmente codificada no Windows, mas mesmo que você passasse pelo enorme incômodo de alterá-la, acabaria quebrando tanto que não valeria a pena. Muitos aplicativos esperam que a variável de caminho seja o que o Windows há muito especificava. Nós não podemos simplesmente sair por aí mudando sem criar uma bagunça enorme.
Onde isso te deixa? Bem, a solução mais simples é apenas editar os dados do caminho. Por exemplo, se você tem uma tonelada de artigos salvos onde o aplicativo / extensão que você usou para salvá-los da web criou um diretório que era o título completo do artigo + o lead do artigo e o próprio nome do arquivo é o título completo do artigo + o artigo principal, seria muito simples atingir ou exceder o MAX_PATH com um único salvamento. Editar esses títulos enormes de pastas e artigos até um tamanho mais razoável é uma maneira fácil de corrigir o problema.
Se você tiver um grande número de arquivos com um caminho longo e não quiser editá-los todos (ou se quiser excluir uma tonelada de diretórios antigos que são muito longos para o Windows lidar quando restritos pela variável MAX_PATH), há um trabalho de linha de comando. Embora o Windows seja restrito pela variável MAX_PATH, os engenheiros do Windows perceberam que haveria situações em que os usuários precisariam lidar com nomes de caminho mais longos. Como tal, a API do Windows tem uma função para lidar com caminhos extremamente longos.
Para aproveitar essa API e usar ferramentas de linha de comando em pastas / nomes de arquivos difíceis de administrar, basta anexar o nome do diretório com alguns caracteres extras. Por exemplo, se você tivesse uma estrutura de diretório enorme que desejasse excluir (mas recebesse um erro devido à duração do caminho quando a tentasse), você poderia alterar o comando de:
rmdir c: \ documents \ algum-realmente-super-long-folder-name-scheme \
para:
rmdir \\? \ c: \ documents \ algum-realmente-super-long-folder-name-scheme \
A chave é a adição do \\? \
porção antes do início do caminho do arquivo; isso instrui o Windows a desconsiderar as limitações impostas pela variável MAX_PATH e a interagir com o caminho que você acabou de fornecer, conforme fornecido diretamente pelo sistema de arquivos subjacente (que pode claramente suportar um caminho mais longo). Como sempre, tenha cuidado no prompt de comando para evitar a exclusão acidental de arquivos ou diretórios que você pretendia deixar intactos..
Se a nossa visão geral desse problema o interessa, vá a este artigo da biblioteca do Microsoft Developer Network, Nomeando arquivos, Caminhos e Espaços de Nomes, para obter mais informações sobre o que está acontecendo sob o capô.
Tem uma pergunta tecnológica urgente? Envie-nos um e-mail para [email protected] e faremos o possível para atendê-lo..