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.
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
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.)
Você pode contornar essa limitação usando a notação \\? \ C:. É feio, mas suporta comprimentos de arquivo de até 2 ^ 15.
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.