Si bien NTFS permite rutas de unos 32,000 caracteres de largo, ha encontrado la limitación de longitud de ruta de 259 caracteres de la API Win32 .
En la API de Windows (con algunas excepciones discutidas en el [documento vinculado]), la longitud máxima para una ruta es MAX_PATH
, que se define como 260 caracteres.
(Además, hay un NULL
carácter de terminación adjunto a la ruta, que nos da 259 caracteres utilizables).
Debido a que Explorer (y casi todas las demás aplicaciones de Windows) dependen de la API Win32 para acceder al sistema de archivos, no es práctico sortear esta limitación aunque sea posible :
La API de Windows tiene muchas funciones que también tienen versiones Unicode para permitir una ruta de longitud extendida para una longitud de ruta total máxima de 32,767 caracteres. Este tipo de ruta se compone de componentes separados por barras invertidas, cada uno hasta el valor devuelto en el lpMaximumComponentLength
parámetro de la GetVolumeInformation
función (este valor suele ser 255 caracteres). Para especificar una ruta de longitud extendida, use el prefijo "\\? \". Por ejemplo, "\\? \ D: \ ruta muy larga ".
Desafortunadamente, no puede simplemente escribir \\?\D:\very long path
en una ventana del Explorador. La aplicación debe estar diseñada para aprovechar estas API y manejar nombres de ruta muy largos.
Una forma de acceder a rutas de longitud extendida en Windows es instalar Cygwin , una capa de emulación * nix para Windows. En mis pruebas, Cygwin no parece estar limitado por MAX_PATH
; bash y vi no tuvieron problemas con las rutas de 2.000 caracteres de largo.
Tenga en cuenta que aunque puede usar bash para explorar rutas de longitud extendida, probablemente no podrá abrir archivos en esas rutas en aplicaciones normales de Windows. Por ejemplo, escribir notepad
mientras el directorio de trabajo es una ruta de longitud extendida
Error: el directorio de trabajo actual tiene una ruta más larga que la permitida para un directorio de trabajo Win32. No se puede iniciar la aplicación nativa de Windows desde aquí.
Y tratar notepad "\\?\D:\very long path\file.txt"
tampoco funciona; se inicia, pero solo dice "No se puede encontrar el archivo ..." Intentar lo mismo con Notepad ++ lo bloquea. (Probablemente un desbordamiento del búfer).
Su otra opción para acceder a archivos específicos enterrados en una ruta de longitud extendida es acortar la ruta creando un punto de unión NTFS . Desde un símbolo del sistema elevado:
D:\> mklink /J jct "\\?\D:\very\long\path"
Ahora puede acceder al contenido de D:\very\long\path\
desde D:\jct\
. No tendrá problemas de longitud de ruta porque en lo que respecta al Explorador y otras aplicaciones, la ruta es justa D:\jct\
(o lo que sea). El controlador NTFS maneja la redirección de la ruta (el "punto de análisis") de forma transparente.
La desventaja de este enfoque es obviamente que debe crear una unión cerca del archivo al que desea acceder; todavía no puede simplemente navegar por toda la estructura del directorio.
Con respecto a los caracteres especiales ( " * : < > ? \ |
), eso es simplemente un no-ir. Esos caracteres tienen significados especiales dentro de Windows, por lo que no es posible usarlos dentro de las rutas. (Cygwin le permite crear archivos con caracteres especiales, pero lo hace sustituyendo los caracteres con caracteres Unicode especiales, que luego sustituye al leer. Ver estos archivos creados por Cygwin en Linux o en Explorer no se vería bien, ya que los caracteres Unicode no serían sustituidos de nuevo.)
Dicho todo esto, ¿qué estás haciendo que requiere caminos muy largos? Quizás podría facilitarle la vida al reevaluar lo que está haciendo y evitar largos caminos. Lo más probable es que no necesites caminos tan largos de todos modos .