22Aug

Por que Windows Reporting Esta pasta é muito longa para copiar?

Se você trabalha com o Windows o suficiente, especialmente com pastas e arquivos com nomes longos, você terá um erro bizarro: o Windows informará que o caminho da pasta ou o nome do arquivo são muito longos para se mover 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 coisas. Então, quando eu movia alguns arquivos para uma pasta, eu recebi uma mensagem, afirmando que o caminho da pasta resultante seria muito longo. Eu estava confuso. Eu sei que cada sistema operacional único desde o DOS suporta nomes de arquivos longos, mas o Windows afirma que o caminho é muito longo? Por que isso acontece?

Sinceramente,

Sr. Desorganizado

O problema em que se encontra é uma infeliz intersecção de dois sistemas que, em casos como este, produzem um erro. Para entender exatamente de onde o erro vem, precisamos digitar o histórico de Long Filenames( LFN) e como o Windows interage com eles antes de investigar soluções. Os arquivos longos

foram introduzidos, através da arquitetura subjacente do MS-DOS, no Windows 95. O novo sistema LFN permitiu nomes de arquivos e diretórios de até 255 caracteres. Esta foi uma expansão bem-vinda do sistema de nomes de arquivos anteriores, normalmente chamado de arquivo 8.3 porque o nome era 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 havia muitos aplicativos baseados em DOS e havia mais de algumas dores de cabeça tentando obter os PNFs mais novos e os SFNs legados para jogar bem um com o outro. Se você já se deparou com um disquete antigo ou CD-ROM com arquivos estritamente truncados nele( como abcdef ~ 1.txt), esse nome de arquivo foi reduzido por alguma aplicação herdada do SFN de algum LFN mais longo e não suportado( como o abcdefghijk. TXT).

Estamos muito longe de meados da década de 1990, no entanto, e todo o nome do Filename longo é( na sua maioria) firmemente eliminado. Se você estiver executando uma versão do Windows nos últimos 10 anos, provavelmente nunca se deparou com um conflito de comprimento de arquivo, como nós, costumávamos correr para trás no DOS / Windows 95 dias. Dito isto, ainda encontramos soluços, como você descobriu com seu projeto de limpeza de disco. Mas por que? Se o sistema de Filename Longo do Windows suportar pastas e nomes de arquivos de até 255 caracteres por componente, em que parede você está executando? Não podemos responsabilizar o NTFS( o sistema de arquivos que a grande maioria das máquinas Windows modernas usam), pois o NTFS suportará um encadeamento de pastas e nomes de arquivos até um comprimento de caminho total de 32.767 caracteres. Isso excede a estrutura de diretórios típica, a maioria dos usuários jamais precisaria.

Onde tudo desmorona é uma restrição artificial que o Windows pilha em cima do 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 260 caracteres totais, incluindo a letra da unidade, dois pontos, barra invertida e folga nula no final. Assim, você tem apenas um potencial MAX_PATH real de 256 caracteres, e. C: \ your-256-character-path \ .

Então, o que aconteceu quando você estava limpando seu computador é que você tinha um diretório com um caminho já longo( seja porque os nomes das pastas eram longos, os nomes dos arquivos eram longos ou ambos) e quando você tentou mover um ou maisdesses diretórios em outro diretório com um longo caminho, 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 mudar a variável MAX_PATH e resolver o problema! "Infelizmente, não é tão simples. Não só a variável MAX_PATH é essencialmente codificada no Windows, mas mesmo que você tenha passado pelo enorme aborrecimento de mudá-lo, você acabaria quebrando tanto que não valeria a pena. Muitas aplicações esperam que a variável de caminho seja o que o Windows especificou há muito tempo. Não podemos simplesmente mudar isso sem criar uma enorme bagunça.

Onde isso deixa você?Bem, a solução mais simples é apenas editar os dados do caminho. Por exemplo, se você tiver 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 líder do artigo e, em seguida, o nome do arquivo em si é o título completodo artigo + o líder do artigo, seria muito simples acertar ou exceder o MAX_PATH com um único salvamento. Editar esses enormes títulos de pastas e artigos para um tamanho mais razoável é uma maneira fácil de resolver o problema.

Se você tiver uma grande quantidade de arquivos com um longo caminho e não quiser editá-los todos( ou se desejar , exclua uma tonelada de diretórios antigos que são muito longos para que o Windows possa lidar quando restringido peloVariável MAX_PATH), há um trabalho de linha de comando ao redor. Embora o Windows esteja 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 suas pastas / nomes de arquivos difíceis de usar, basta anexar o nome do diretório com alguns caracteres extras. Por exemplo, se você tivesse uma estrutura de diretório enorme que você queria excluir( mas recebeu um erro devido ao comprimento do caminho quando você tentou), você poderia alterar o comando de:

rmdir c: \ documents \ some-really-super-long-folder-name-scheme \

para:

rmdir \\? \ c: \ documents \ some-really-super-long-folder-name-scheme \

A chave é a adição da \\? \ portionantes do início do caminho do arquivo;Isso instrui o Windows a ignorar as limitações impostas pela variável MAX_PATH e a interagir com o caminho que você acabou de fornecer como fornecido / compreendido diretamente pelo sistema de arquivos subjacentes( o que pode suportar claramente um caminho mais longo).Como sempre, tenha cuidado com o prompt de comando para evitar a exclusão acidental de arquivos ou diretórios que você pretende deixar intactos.

Se a nossa visão geral sobre este assunto tiver curiosidade, digite definitivamente este artigo da biblioteca Microsoft Developer Network, Naming Files, Paths e Namespaces, para obter mais informações sobre o que está acontecendo sob o capô.

Tem uma pergunta de tecnologia urgente? Nos apresente um e-mail para [email protected] e faremos o nosso melhor para respondê-lo.