Longitud máxima del nombre de archivo en Windows
En la API de Windows (con algunas excepciones que se comentan en los párrafos siguientes), la longitud máxima de una ruta es MAX_PATH, que se define como 260 caracteres. Una ruta local se estructura en el siguiente orden: letra de la unidad, dos puntos, barra invertida, componentes del nombre separados por barras invertidas y un carácter nulo de terminación. Por ejemplo, la ruta máxima en la unidad D es “D:Nuna cadena de ruta de 256 caracteres
Ahora vemos que es 1+2+256+1 o [drive][:][path][null] = 260. Se podría asumir que 256 es una longitud de cadena fija razonable desde los días del DOS. Y volviendo a las APIs del DOS nos damos cuenta de que el sistema rastreaba la ruta actual por unidad, y tenemos 26 (32 con símbolos) unidades máximas (y directorios actuales).
La INT 0x21 AH=0x47 dice “Esta función devuelve la descripción de la ruta sin la letra de la unidad y la barra invertida inicial”. Así que vemos que el sistema almacena el CWD como un par (unidad, ruta) y se pide la ruta especificando la unidad (1=A, 2=B, …), si se especifica un 0 entonces se asume la ruta de la unidad devuelta por INT 0x21 AH=0x15 AL=0x19. Así que ahora sabemos por qué es 260 y no 256, porque esos 4 bytes no se almacenan en la cadena de ruta.
Nombre de archivo de Windows demasiado largo
En la API de Windows (con algunas excepciones que se comentan en los párrafos siguientes), la longitud máxima de una ruta es MAX_PATH, que se define como 260 caracteres. Una ruta local se estructura en el siguiente orden: letra de la unidad, dos puntos, barra invertida, componentes del nombre separados por barras invertidas y un carácter nulo de terminación. Por ejemplo, la ruta máxima en la unidad D es “D:Nuna cadena de ruta de 256 caracteres
La API de Windows tiene muchas funciones que también tienen versiones Unicode para permitir una ruta de longitud extendida para una longitud total máxima de ruta de 32.767 caracteres. Este tipo de ruta se compone de componentes separados por barras invertidas, cada uno hasta el valor devuelto en el parámetro lpMaximumComponentLength de la función GetVolumeInformation (este valor suele ser de 255 caracteres). Para especificar una ruta de longitud extendida, utilice el prefijo “️”. Por ejemplo, “ND:Nuna ruta muy larga”.
Longitud del nombre de archivo en Windows 10
La longitud máxima de una ruta (nombre de archivo y su ruta de directorio) -también conocida como MAX_PATH- se ha definido en 260 caracteres. Pero con la última vista previa de Windows 10 Insider, Microsoft está dando a los usuarios la capacidad de aumentar el límite.
La más reciente vista previa de Windows 10 está permitiendo a los usuarios cambiar el límite de 260 caracteres. Como se menciona en la descripción, “Habilitar las rutas largas de NTFS permitirá que las aplicaciones win32 manifestadas y las aplicaciones de Windows Store accedan a las rutas más allá del límite normal de 260 caracteres por nodo.”
La ruta larga habilitada en Windows 10 no funciona
En la API de Windows (con algunas excepciones que se comentan en los siguientes párrafos), la longitud máxima de una ruta es MAX_PATH, que se define como 260 caracteres. Una ruta local se estructura en el siguiente orden: letra de la unidad, dos puntos, barra invertida, componentes del nombre separados por barras invertidas y un carácter nulo de terminación. Por ejemplo, la ruta máxima en la unidad D es “D:Nuna cadena de ruta de 256 caracteres
Ahora vemos que es 1+2+256+1 o [drive][:][path][null] = 260. Se podría asumir que 256 es una longitud de cadena fija razonable desde los días del DOS. Y volviendo a las APIs del DOS nos damos cuenta de que el sistema rastreaba la ruta actual por unidad, y tenemos 26 (32 con símbolos) unidades máximas (y directorios actuales).
La INT 0x21 AH=0x47 dice “Esta función devuelve la descripción de la ruta sin la letra de la unidad y la barra invertida inicial”. Así que vemos que el sistema almacena el CWD como un par (unidad, ruta) y se pide la ruta especificando la unidad (1=A, 2=B, …), si se especifica un 0 entonces se asume la ruta de la unidad devuelta por INT 0x21 AH=0x15 AL=0x19. Así que ahora sabemos por qué es 260 y no 256, porque esos 4 bytes no se almacenan en la cadena de ruta.