Superando as restrições máximas de tamanho de caminho de arquivo no Windows

27

Um de nossos clientes usa habitualmente nomes de caminho muito longos (várias pastas aninhadas, com nomes longos) e encontramos rotineiramente "problemas de educação do usuário" para encurtar o caminho para menos de 260 caracteres.

Existe uma solução técnica disponível? Podemos usar algum tipo de switch no Windows 7 e no Windows 2008 R2 para dizer "é só ignorar esses problemas históricos e fazer um trabalho com o nome do caminho de +260 caracteres".

P.S. Eu li e fui totalmente não editado por Nomeando arquivos, caminhos e espaços para nome

    
por Christopher Edwards 08.02.2011 / 23:29

4 respostas

12

Os métodos estão lá, mas até a Microsoft recodificar o widget do navegador de arquivos, estamos praticamente presos a esse problema antigo. É sub-ótimo, mas é assim que funciona.

    
por 08.02.2011 / 23:41
25

Basta mencionar um truque que não vejo mencionado aqui ainda.

Pegue este arquivo por exemplo:

C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason6DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns1313_tax_return.pdf

Este caminho de arquivo completo tem 290 caracteres. O shell (Windows Explorer) e a maioria dos utilitários de linha de comando provavelmente não permitem que você o toque.

Use o comando subst da seguinte forma:

subst X: "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow"

Agora você pode acessar (e excluir, mover, etc.) o arquivo desta forma:

X:\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason6DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns1313_tax_return.pdf

E agora esse nome de arquivo tem apenas ~ 235 caracteres ou mais, então você não encontrará mais nenhum problema com o "Nome do arquivo é muito longo".

Na API do Windows, existe uma constante infame conhecida como MAX_PATH . MAX_PATH tem 260 caracteres. O sistema de arquivos NTFS na verdade suporta caminhos de arquivo de até 32.767 caracteres. E você ainda pode usar 32.767 nomes de caminho de caracteres longos, acessando as versões Unicode (ou "ampla") das funções da API do Windows e também prefixando o caminho com \?\ .

MAX_PATH foi definido em um muito longo tempo atrás no mundo do Windows. Eu acho que tem algo a ver com os padrões ANSI na época ... mas é uma daquelas coisas que é muito difícil para a Microsoft mudar agora, pois agora temos milhares de programas e aplicativos, incluindo alguns escritos pela própria Microsoft, que usam MAX_PATH e falharia de novas maneiras estranhas se a constante fosse repentinamente alterada. (Buffer overflows, corrupção de pilha, etc.)

    
por 25.12.2014 / 18:31
10

Você pode contornar essa limitação usando a notação \\? \ C:. É feio, mas suporta comprimentos de arquivo de até 2 ^ 15.

link

    
por 09.02.2011 / 01:00
8

A Microsoft agora tem uma correção disponível para este começo com o Windows 10, que é explicado no Nomeando arquivos, caminhos e namespaces Artigo do MSDN.

O darthcoder já respondeu com detalhes sobre a solução alternativa de \?\C: notação, mas agora existe uma chave de registro em HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD) que pode ser usada para remover as limitações de MAX_PATH para um único sistema. O artigo também menciona o suporte para o controle de Diretiva de Grupo em Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long paths para implementação em toda a organização ou em todo o grupo, se necessário.

    
por 16.04.2017 / 05:31