Um de nossos clientes costuma usar nomes de caminho muito longos (várias pastas aninhadas, com nomes longos) e rotineiramente encontramos "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 apertar algum tipo de interruptor no Windows 7 e no Windows 2008 R2 para dizer "sim, apenas ignore esses problemas históricos e faça com que o nome do caminho de +260 caracteres funcione".
PS Eu li e fui totalmente não edificado por nomes de arquivos, caminhos e namespaces
Apenas mencionando um truque que não vejo mencionado aqui ainda.
Tome 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 reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_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 permitirão que você o toque.
Use o
subst
comando assim:Agora você pode acessar (e excluir, mover, etc.) o arquivo assim:
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 reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf
E agora esse nome de arquivo tem apenas ~ 235 caracteres ou mais, então você não encontrará mais os problemas "O nome do arquivo é muito longo".
Na API do Windows, há uma constante infame conhecida como
MAX_PATH
. MAX_PATH tem 260 caracteres. Na verdade, o sistema de arquivos NTFS oferece suporte a caminhos de arquivo de até 32.767 caracteres. E você ainda pode usar nomes de caminho de 32.767 caracteres acessando as versões Unicode (ou "amplas") das funções da API do Windows e também prefixando o caminho com\\?\
.MAX_PATH
foi gravado em pedra há muito tempo no mundo Windows. Acho que tem algo a ver com os padrões ANSI da é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ópriaMAX_PATH
e falharia de maneiras novas e estranhas se a constante fosse mudada de repente. (estouro de buffer, corrupção de heap, etc.)Os métodos estão lá, mas até que a Microsoft recodifique o widget do navegador de arquivos, estamos praticamente presos a esse velho problema. É sub-ótimo, mas é assim que funciona.
Você pode contornar essa limitação usando a notação \\?\C:. É feio, mas suporta tamanhos de arquivo de até 2^15.
http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#maxpath
A Microsoft agora tem uma correção disponível para isso começando com o Windows 10, que é explicada no artigo do MSDN de nomeação de arquivos, caminhos e namespaces .
darthcoder já respondeu com detalhes sobre a
\\?\C:
notação alternativa, mas agora existe uma chave de registro naHKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)
qual pode ser usada para remover as limitações de MAX_PATH para um único sistema. O artigo também menciona suporte para controle de Diretiva de GrupoComputer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long paths
para implementação em toda a organização ou grupo, se necessário.