Qual é o caminho de arquivo mais longo que o Windows pode manipular?

57

Qual é o caminho de arquivo mais longo que o Windows pode manipular?

Ron Tuffin
fonte

Respostas:

48

Comprimento máximo do caminho (do MSDN)

Na API do Windows (com algumas exceções discutidas nos parágrafos a seguir), o comprimento máximo de um caminho é MAX_PATH, definido como 260 caracteres . Um caminho local é estruturado na seguinte ordem: letra da unidade, dois pontos, barra invertida, componentes separados por barras invertidas e um caractere nulo final. Por exemplo, o caminho máximo na unidade D é "D: \ <alguma cadeia de caracteres de 256 caracteres> <NUL>" onde "<NUL>" representa o caractere nulo final invisível para a página de código atual do sistema. (Os caracteres <> são usados ​​aqui para maior clareza visual e não podem fazer parte de uma cadeia de caminho válida.)

Adam Matan
fonte
4
Você deve mencionar que pode lidar com caminhos que excedem esse limite prefixando-o com `\\?` (Acho que foi essa sequência de caracteres).
294 Joey
3
você também deve indicar o limite para Unicode caminhos mencionados no § 2º: ~ 32k
akira
260? 256 caracteres que ignoram a unidade: \ e o terminador. É 2009, por que só temos um byte de caracteres para brincar?
Phoshi 11/10/09
@Phoshi As APIs para usar caminhos mais longos não são usadas pelo sistema operacional por padrão, porque passar seqüências arbitrariamente longas para aplicativos mal escritos por desenvolvedores que sabiam que o caminho nunca poderia ter mais de 260 caracteres e decidiram alocar um comprimento fixo uma matriz para retê-lo resultaria em um grande número de estouros de buffer, levando a que os aplicativos travassem e / ou fossem explorados. Implementações ligeiramente melhores por desenvolvedores com o mesmo desconhecimento seriam abortadas porque a validação do caminho relatava um erro muito longo.
Dan Neely
15

Caminho do arquivo XP - 250 caracteres

Caminho do arquivo do Vista - 260 caracteres

O caminho mais longo em uma instalação limpa do Windows XP é de 152 caracteres.

O caminho mais longo em uma instalação semi-limpa do Windows Vista é de 195 caracteres:

O Windows XP permite nomes de arquivos com até 255 caracteres

O Windows Vista permite nomes de arquivos ainda mais longos, contendo até 260 caracteres.

http://www.codinghorror.com/blog/archives/000729.html

Joe
fonte
5
este é apenas verdadeiro se você não usar o unicode-api, que estende o limite um pouco (~ 32k, consulte msdn.microsoft.com/en-us/library/... )
akira
11
hmmm. nesse ritmo, o limite no Win7 deveria estar em torno de 265 caracteres, não?
quack quixote
Por que eles aumentariam o limite em dez caracteres? Não parece valer a pena, vale a pena: \
Phoshi 11/11/2009
isso está incorreto. O comprimento máximo nome ainda é de 255 caracteres em qualquer Windows, já que é o NTFS limite
phuclv
8

A constante do Windows MAX_PATHé igual a 260, como outras respostas dizem, no entanto, o caminho mais longo real é 32767.

Veja aqui .

32k está usando UNICODE, mas agora devemos usá-lo, portanto, também devemos usar esse tamanho máximo de caminho.

Além disso, você pode dar uma olhada na minha resposta no SO, que explica algumas coisas mais detalhadas sobre o comprimento máximo do caminho.

ST3
fonte
1

O limite "clássico" é de 260 caracteres: drive letter+ :\+ 255 characters of filename+ \(ou para arredondamento) + null terminatorcomo dito nas outras respostas

No entanto, o limite interno real é de 32767 caracteres, que podem ser alcançados anexando \\?\-se a um caminho completo.

A API do Windows possui muitas funções que também possuem versões Unicode para permitir um caminho de tamanho estendido para um comprimento total máximo de 32.767 caracteres. Esse tipo de caminho é composto de componentes separados por barras invertidas, cada um até o valor retornado no lpMaximumComponentLengthparâmetro da GetVolumeInformationfunção (esse valor geralmente possui 255 caracteres). Para especificar um caminho de tamanho estendido, use o "\\?\"prefixo. Por exemplo "\\?\D:\very long path",.

Se, por algum motivo, os caminhos totalmente qualificados não puderem ser usados, os diretórios mais profundos poderão ser acessados ​​montando-se em uma letra de unidade com subst/ diskpartou criando uma junção / link simbólico para encurtar o caminho

Desde o Windows 10, o MAX_PATHlimite também foi removido, embora não por padrão

A partir do Windows 10, versão 1607, as MAX_PATHlimitações foram removidas das funções comuns de arquivo e diretório do Win32. No entanto, você deve aceitar o novo comportamento.

https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file

phuclv
fonte