que - ruta relativa windows
¿Qué significa //? / Cuando se antepone a una ruta de archivo? (2)
La API de Windows analiza las cadenas de entrada para la E / S de archivos. Entre otras cosas, se traduce /
a /
como parte de convertir el nombre a un nombre de estilo NT, o interpretar el .
y ..
pseudo directorios. Con pocas excepciones, la API de Windows también limita los nombres de ruta a 260 caracteres.
El propósito documentation del prefijo //?/
Es:
Para E / S de archivos, el prefijo "//? /" A una cadena de ruta le dice a las API de Windows que deshabiliten todo el análisis de cadenas y que envíen la cadena que sigue directamente al sistema de archivos.
Esto permite el uso de .
o ..
en nombres de ruta, así como también relajando el límite del nombre de ruta de 260 caracteres, si el sistema de archivos subyacente admite rutas largas y nombres de archivo.
Encontré una referencia a un archivo en un registro que tenía el siguiente formato:
//?/C:/Path/path/file.log
No puedo encontrar una referencia a lo que significa la secuencia de /? / Creo que la parte entre las barras invertidas se refiere a un nombre de host.
Por ejemplo, en mi computadora con Windows, lo siguiente funciona bien:
dir //?/C:/
y también, bien con el mismo resultado:
dir //./C:/
Preguntas:
- ¿Hay alguna referencia a lo que significa el signo de interrogación en este formato de ruta particular?
- ¿Qué podría generar una ruta de archivo en dicho formato?
Una lectura larga, pero vale la pena leerla si se encuentra en este dominio: http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx
Extraer:
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 parámetro
lpMaximumComponentLength
de la funciónGetVolumeInformation
(este valor suele tener 255 caracteres). Para especificar una ruta de longitud extendida, use el prefijo"//?/"
. Por ejemplo,"//?/D:/very long path"
.
y:
El prefijo
"//?/"
También se puede usar con rutas construidas de acuerdo con la convención de nomenclatura universal (UNC). Para especificar tal ruta usando UNC, use el prefijo"//?/UNC/"
. Por ejemplo,"//?/UNC/server/share"
, donde"server"
es el nombre de la computadora y"share"
es el nombre de la carpeta compartida. Estos prefijos no se usan como parte de la ruta en sí. Indican que la ruta debe pasarse al sistema con una modificación mínima, lo que significa que no puede usar barras diagonales para representar separadores de ruta, o un período para representar el directorio actual, o puntos dobles para representar el directorio principal. Como no puede usar el prefijo"//?/"
Con una ruta relativa, las rutas relativas siempre se limitan a un total de caracteresMAX_PATH
.