Limitação do nome do caminho da janela 256 caracteres

15

depois de uma longa pesquisa, eu finalmente descobri que nomes de caminho não podem ter mais de 256 caracteres, mesmo no mais recente Microsoft Windows 7. Eu realmente não entendi porque há uma limitação tão estúpida, uma vez que NTFS pode lidar com ~ 32.000 caracteres comprimento do caminho sem qualquer 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 para casos de uso simples, como alguns diretórios de fotos aninhadas com nomes extensos de arquivos.

    
por HopelessN00b 23.07.2010 / 16:15

3 respostas

17

Segundo a Microsoft:

  • A API tradicional do Windows limita os nomes de caminho a 260 caracteres, mesmo para aplicativos desenvolvidos para a versão mais recente.

  • Aplicativos usando a API compatível com Unicode podem usar uma forma de caminho que permite até 32767 caracteres. O nome do arquivo precisa ser prefixado com \?\ 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 de arquivos profunda e precisa trabalhar com um aplicativo que é excluído por causa do tamanho do nome do arquivo, há algumas coisas que você pode tentar:

  • Use o comando mklink para crie links simbólicos e passe um caminho que os use para o seu aplicativo.

  • Use o comando subst para atribuir uma letra de unidade a um diretório.

  • Inicie o seu aplicativo em 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ê tiver micros~1 ao lado de micros~2 , não sei como saber qual é qual ; talvez execute DOS command.com (novamente, assumindo que o Windows 7 ainda pode fazer isso).

por 23.07.2010 / 19:16
0

Você pode usar os nomes curtos (8.3) para todas as suas pastas e arquivos.

Você precisa se certificar de que eles estão habilitados.

A long file name is considered to be any file name that exceeds the short MS-DOS (also called 8.3) style naming convention. Typically, Windows stores long file names on disk as special directory entries, which can be disabled systemwide for performance reasons depending on the particular file system. When you create a long file name, Windows may also create a short 8.3 form of the name, called the 8.3 alias, and store it on disk also. This 8.3 aliasing can be disabled for a specified volume.

(meu negrito)

Você também terá que escrever algum código para obter o nome abreviado do nome longo.

Fonte

    
por 23.07.2010 / 16:20
0

O nome do arquivo / diretório no NTFS é limitado a 255 pontos de código unicode, já que o tamanho é armazenado como um byte. Mas não há limite inerente do comprimento total do caminho.

Muitas chamadas de API do Win32 (incluindo o shell do explorer) têm o limite de 260 - 1. Algumas outras chamadas têm a capacidade de usar o prefixo \\? \ Para obter até 32K (um pouco menos, já que o nome do volume é substituído no Kernel-land)

    
por 31.08.2010 / 19:31