A questão é por que a limitação ainda existe. Certamente o Windows moderno pode aumentar o lado MAX_PATH
para permitir caminhos mais longos. Por que a limitação não foi removida?
- A razão pela qual não pode ser removido é que o Windows prometeu que nunca mudaria.
Através do contrato de API, o Windows garantiu a todos os aplicativos que as APIs de arquivo padrão nunca retornarão um caminho mais longo que os 260
caracteres.
Considere o seguinte código correto :
WIN32_FIND_DATA findData;
FindFirstFile("C:\Contoso\*", ref findData);
O Windows garantiu ao meu programa que ele preencheria minha WIN32_FIND_DATA
estrutura:
WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
//...
TCHAR cFileName[MAX_PATH];
//..
}
Meu aplicativo não declarou o valor da constante MAX_PATH
, a API do Windows fez. Meu aplicativo usou esse valor definido.
Minha estrutura está definida corretamente e aloca apenas o 592
total de bytes. Isso significa que eu só consigo receber um nome de arquivo com menos de 260
caracteres. O Windows me prometeu que, se eu escrevesse meu aplicativo corretamente, ele continuaria funcionando no futuro.
Se o Windows permitir nomes de arquivos com mais de 260
caracteres, meu aplicativo existente (que usou a API correta corretamente) falhará.
Para quem pede que a Microsoft altere a MAX_PATH
constante, primeiro é necessário garantir que nenhum aplicativo existente falhe. Por exemplo, eu ainda possuo e uso um aplicativo do Windows que foi escrito para ser executado no Windows 3.11. Ele ainda roda no Windows 10. de 64 bits. É isso que a compatibilidade com versões anteriores oferece.
Microsoft fez criar uma maneira de usar o total de 32.768 nomes de caminho; mas eles tiveram que criar um novo contrato de API para fazer isso. Por um lado, você deve usar a API do Shell para enumerar arquivos (como nem todos os arquivos existem em um disco rígido ou em um compartilhamento de rede).
Mas eles também precisam não quebrar os aplicativos de usuário existentes. A grande maioria dos aplicativos não usa a API do shell para o trabalho do arquivo. Todo mundo simplesmente liga FindFirstFile
/ FindNextFile
e liga por dia.