¿Cuál es la ruta de archivo más larga que Windows puede manejar?

57

¿Cuál es la ruta de archivo más larga que Windows puede manejar?

Ron Tuffin
fuente

Respuestas:

48

Longitud máxima de ruta (desde MSDN)

En la API de Windows (con algunas excepciones discutidas en los siguientes párrafos), la longitud máxima para una ruta es MAX_PATH, que se define como 260 caracteres . Una ruta local se estructura en el siguiente orden: letra de unidad, dos puntos, barra diagonal inversa, componentes separados por barras diagonales inversas y un carácter nulo de terminación. Por ejemplo, la ruta máxima en la unidad D es "D: \ <una cadena de ruta de 256 caracteres> <NUL>" donde "<NUL>" representa el carácter nulo de terminación invisible para la página de códigos del sistema actual. (Los caracteres <> se usan aquí para mayor claridad visual y no pueden ser parte de una cadena de ruta válida).

Adam Matan
fuente
44
Debería mencionar que puede manejar rutas que excedan este límite prefijándolo con `\\?` (Creo que fue esa secuencia de caracteres).
Joey el
3
También debe indicar el límite para las rutas Unicode mencionadas en el segundo párrafo: ~ 32k
akira
260? 256 caracteres ignorando unidad: \ y terminador. Es 2009, ¿por qué solo obtenemos un byte de personajes para jugar?
Phoshi el
@Phoshi Las API para usar rutas más largas no son utilizadas por el sistema operativo de manera predeterminada, porque pasar cadenas arbitrariamente largas a aplicaciones que fueron mal escritas por desarrolladores que sabían que la ruta nunca podría ser más larga que 260 caracteres y decidieron asignar una longitud fija la matriz para mantenerlo daría lugar a una gran cantidad de desbordamientos de búfer que provocarían el bloqueo y / o la explotación de las aplicaciones. Las implementaciones ligeramente mejores por parte de desarrolladores con el mismo conocimiento erróneo abortarían porque su validación de ruta informó un error demasiado largo.
Dan Neely
15

Ruta del archivo XP: 250 caracteres

Ruta del archivo Vista - 260 caracteres

La ruta más larga en una instalación limpia de Windows XP es de 152 caracteres.

La ruta más larga en una instalación semi-limpia de Windows Vista es de 195 caracteres:

Windows XP permite nombres de archivo de hasta 255 caracteres de longitud

Windows Vista permite nombres de archivo aún más largos que contienen hasta 260 caracteres.

http://www.codinghorror.com/blog/archives/000729.html

joe
fuente
55
esto es cierto si no utiliza la API de Unicode, que extiende un poco el límite (~ 32k, consulte msdn.microsoft.com/en-us/library/… )
akira
1
hmmm a ese ritmo, el límite en Win7 debería ser de alrededor de 265 caracteres, ¿no?
quack quijote
¿Por qué aumentarían el límite en diez caracteres? No parece que valga la pena, ¿verdad: \
Phoshi
Esto es incorrecto. La longitud máxima del nombre de archivo sigue siendo 255 caracteres en cualquier Windows, ya que ese es el límite de NTFS
phuclv
8

La constante de Windows MAX_PATHes igual a 260 como dicen otras respuestas, sin embargo, la ruta más larga real es 32767.

Ver aquí .

32k es mientras se usa UNICODE, pero ahora debemos usarlo, por lo que también deberíamos usar esa longitud máxima de ruta.

Además, puede consultar mi respuesta en SO, que explica algunas cosas más detalladas sobre la longitud máxima de la ruta.

ST3
fuente
1

El límite "clásico" es de 260 caracteres: drive letter+ :\+ 255 characters of filename+ \(o para redondear) + null terminatorcomo se dice en las otras respuestas

Sin embargo, el límite interno real es de 32767 caracteres que se pueden lograr al agregar \\?\para obtener una ruta totalmente calificada

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 lpMaximumComponentLengthparámetro de la GetVolumeInformationfunción (este valor suele ser 255 caracteres). Para especificar una ruta de longitud extendida, use el "\\?\"prefijo. Por ejemplo, "\\?\D:\very long path".

Si, por alguna razón, no se pueden usar rutas totalmente calificadas, se puede acceder a directorios más profundos montando en una letra de unidad con subst/ diskparto creando una unión / enlace simbólico para acortar la ruta

Desde Windows 10, el MAX_PATHlímite también se ha eliminado, aunque no de forma predeterminada

A partir de Windows 10, versión 1607, las MAX_PATHlimitaciones se han eliminado de las funciones comunes de archivos y directorios de Win32. Sin embargo, debe optar por el nuevo comportamiento.

https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file

phuclv
fuente