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

17

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.

HopelessN00b
fonte
11
Acho que a preocupação é que existam programas mais antigos que tenham uma ideia codificada de quanto tempo deve ser o caminho, de modo que, se você tentar usá-los em caminhos mais longos, eles explodirão de maneiras interessantes.
Dsolimano
Os sistemas operacionais Linux têm esse problema?
ahorn 29/11/19

Respostas:

18

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\fileou \\?\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 mklinkcomando para criar links simbólicos e passe um caminho que os use para seu aplicativo.

  • Use o substcomando 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ê tiver micros~1ao lado micros~2, não sei como saber qual é qual; talvez execute o DOS command.com(novamente, supondo que o Windows 7 ainda possa fazê-lo).

Gilles 'SO- parar de ser mau'
fonte
3
Bem, até o Windows Explorer do Win7 parece usar a API tradicional! É uma pena.
3
Ainda mais barras invertidas `\\? \` :-)
Ring Ø
@Gilles, micros ~ 1 e micros ~ 2 são padronizados em todos os sistemas ou é aleatório?
Pacerier 28/02
@Pacerier O diretório que foi criado primeiro recebe micros~1, por isso é essencialmente aleatório.
Gilles 'SO- stop be evil'
0

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

Você precisa garantir que eles estejam ativados.

Um nome de arquivo longo é considerado qualquer nome de arquivo que exceda a convenção de nomenclatura curta do estilo MS-DOS (também chamada 8.3). Normalmente, o Windows armazena nomes longos de arquivos no disco como entradas especiais de diretório, que podem ser desabilitadas em todo o sistema por motivos de desempenho, dependendo do sistema de arquivos específico. Quando você cria um nome de arquivo longo, o Windows também pode criar um formato 8.3 curto, chamado alias 8.3, e armazená-lo no disco também.Este aliasing 8.3 pode ser desativado para um volume especificado.

(meu negrito)

Você também precisará escrever um código para obter o nome abreviado do nome longo.

Fonte

ChrisF
fonte
2
lol ... bem me lembro desses dias no Windows 95, quando todos nós temos esse super duper FAT32 com nomes de arquivos de 256 caracteres! Isso foi fantástico (nestes dias) e estou realmente chocado que as limitações de nome de arquivo ainda pode ser um problema em estes dias. 2010! O Windows é realmente arcaico ...
0

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)

Dominik Weber
fonte