La pregunta es por qué todavía existe la limitación. Sin duda, Windows moderno puede aumentar el lado de MAX_PATH
permitir caminos más largos. ¿Por qué no se ha eliminado la limitación?
- La razón por la que no se puede eliminar es que Windows prometió que nunca cambiaría.
A través del contrato de API, Windows ha garantizado a todas las aplicaciones que las API de archivos estándar nunca devolverán una ruta más larga que los 260
caracteres.
Considere el siguiente código correcto :
WIN32_FIND_DATA findData;
FindFirstFile("C:\Contoso\*", ref findData);
Windows garantizó a mi programa que llenaría mi WIN32_FIND_DATA
estructura:
WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
//...
TCHAR cFileName[MAX_PATH];
//..
}
Mi aplicación no declaró el valor de la constante MAX_PATH
, lo hizo la API de Windows. Mi aplicación usó ese valor definido.
Mi estructura está definida correctamente y solo asigna 592
bytes en total. Eso significa que solo puedo recibir un nombre de archivo con menos de 260
caracteres. Windows me prometió que si escribía mi aplicación correctamente, mi aplicación continuaría funcionando en el futuro.
Si Windows permitiera nombres de archivo más largos que 260
caracteres, entonces mi aplicación existente (que usaba la API correcta correctamente) fallaría.
Para cualquiera que llame a Microsoft para cambiar la MAX_PATH
constante, primero deben asegurarse de que ninguna aplicación existente falle. Por ejemplo, todavía poseo y uso una aplicación de Windows que se escribió para ejecutarse en Windows 3.11. Todavía se ejecuta en Windows 10 de 64 bits. Eso es lo que le brinda la compatibilidad con versiones anteriores.
Microsoft hizo crear una manera de utilizar los 32.768 nombres completos de rutas; pero tuvieron que crear un nuevo contrato de API para hacerlo. Por un lado, debe usar la API de Shell para enumerar archivos (ya que no todos los archivos existen en un disco duro o recurso compartido de red).
Pero también tienen que no romper las aplicaciones de usuario existentes. La gran mayoría de las aplicaciones no utilizan la API de shell para el trabajo de archivos. Todos simplemente llaman FindFirstFile
/ FindNextFile
y lo llaman un día.