Após uma longa pesquisa, finalmente descobri que os nomes de caminho não podem ter mais de 256 caracteres, mesmo no Microsoft Windows 7. Não entendi por que motivo existe uma limitação tão estúpida, já que o NTFS pode lidar com um caminho de ~ 32.000 caracteres comprimento sem nenhum problema desde mais de uma dúzia de anos! Não há possibilidade de mudar isso? Ou existem soluções práticas para evitar isso?
260 caracteres são muito poucos, mesmo para casos de uso simples, como alguns diretórios de fotos aninhados com nomes de arquivos longos.
Respostas:
De acordo com a Microsoft:
A API tradicional do Windows limita os nomes de caminhos a 260 caracteres, mesmo para aplicativos desenvolvidos para a versão mais recente.
Os aplicativos que usam a API compatível com Unicode podem usar uma forma de caminho que permite até 32767 caracteres. O nome do arquivo deve ser prefixado
\\?\
e deve ser um caminho absoluto, por exemplo,\\?\c:\dir\file
ou\\?\UNC\server\share\file
. Existem outras limitações, consulte a referência para obter detalhes.Se você conseguiu criar e usar uma hierarquia profunda de arquivos e precisa trabalhar com um aplicativo que funciona bem devido ao tamanho do nome do arquivo, há algumas coisas que você pode tentar:
Use o
mklink
comando para criar links simbólicos e passe um caminho que os use para seu aplicativo.Use o
subst
comando para atribuir uma letra de unidade a um diretório.Inicie seu aplicativo a partir de um diretório profundo e passe-o por caminhos relativos curtos.
Substitua alguns nomes longos por seus aliases 8.3 (
micros~1
), assumindo que eles ainda existam no Windows 7. Se você tivermicros~1
ao ladomicros~2
, não sei como saber qual é qual; talvez execute o DOScommand.com
(novamente, supondo que o Windows 7 ainda possa fazê-lo).fonte
micros~1
, por isso é essencialmente aleatório.Você pode usar os nomes abreviados (8.3) para todas as suas pastas e arquivos.
Você precisa garantir que eles estejam ativados.
(meu negrito)
Você também precisará escrever um código para obter o nome abreviado do nome longo.
Fonte
fonte
O nome do arquivo / diretório no NTFS é limitado a 255 pontos de código unicode, pois o comprimento é armazenado como um byte. Mas não há limite inerente ao comprimento total do caminho.
Muitas chamadas de API do Win32 (incluindo shell do explorer) têm o limite de 260 - 1. Algumas outras chamadas têm a capacidade de usar o prefixo \\? \ Para atingir 32K (um pouco menos, pois o nome do volume é substituído no Kernel-land)
fonte