Superar las restricciones de longitud máxima de la ruta del archivo en Windows

36

Uno de nuestros clientes habitualmente usa nombres de ruta muy largos (varias carpetas anidadas, con nombres largos) y habitualmente nos encontramos con "problemas de educación del usuario" para acortar la ruta a menos de 260 caracteres.

¿Existe una solución técnica disponible? ¿Podemos mover algún tipo de interruptor en Windows 7 y Windows 2008 R2 para decir "sí, simplemente ignoren estos problemas históricos y hagan que funcione el nombre de la ruta de caracteres +260".

PD: he leído y no he editado por nombres de archivos, rutas y espacios de nombres

Christopher Edwards
fuente
3
Aquí estamos en 2018 y el problema aún existe en ROBOCOPY. 255 límite. Los que lo exceden simplemente emiten un pitido pero no copian.
SDsolar
@SDsolar: ¿estás usando una versión antigua de robocopy?
Naikrovek
Sí, iba a decir lo mismo: uno tiene que usar robocopy específicamente porque puede manejar caminos largos ...
Rob Nicholson

Respuestas:

12

Los métodos están ahí, pero hasta que Microsoft vuelva a codificar el widget del navegador de archivos, estamos prácticamente atrapados con ese viejo problema. Es subóptimo, pero así es como funciona.

sysadmin1138
fuente
55
Error en el software de MS que se ha solucionado para algunas versiones del sistema operativo, es nuevo ...
Hubert Kario
2
Windows 10 1607 finalmente solucionó el problema del explorador de archivos y tiene algo de magia para engañar a las aplicaciones de Win32 para que trabajen en este extraño y nuevo mundo de enormes caminos: howtogeek.com/266621/…
HackSlash
28

Solo menciono un truco que aún no veo mencionado aquí.

Tome este archivo por ejemplo:

C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf

Esta ruta completa del archivo tiene 290 caracteres de longitud. El shell (Windows Explorer) y la mayoría de las utilidades de línea de comandos probablemente no le permitirán tocarlo.

Use el substcomando así:

subst X: "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow"

Ahora puede acceder (y eliminar, mover, etc.) al archivo de esta manera:

X:\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf

Y ahora ese nombre de archivo tiene solo ~ 235 caracteres más o menos, por lo que ya no se encontrará con el problema "El nombre del archivo es demasiado largo".

En la API de Windows, hay una constante infame conocida como MAX_PATH. MAX_PATH tiene 260 caracteres. El sistema de archivos NTFS en realidad admite rutas de archivo de hasta 32,767 caracteres. Y aún puede usar nombres de ruta largos de 32,767 caracteres accediendo a las versiones Unicode (o "ancho") de las funciones de la API de Windows, y también prefijando la ruta con \\?\.

MAX_PATHse estableció en piedra hace mucho tiempo en el mundo de Windows. Creo que tiene algo que ver con los estándares ANSI en ese momento ... pero es una de esas cosas que es muy difícil para Microsoft cambiar ahora, ya que ahora tenemos miles de programas y aplicaciones, incluidos algunos escritos por Microsoft, que utilizan MAX_PATHy fallaría de formas nuevas y extrañas si la constante se cambiara repentinamente (Desbordamientos de búfer, corrupción de montón, etc.)

Ryan Ries
fuente
99
He estado adoptando un enfoque similar al substuso de uniones de directorio, que pueden ser más convenientes para la limpieza si solo está buscando hacer algunos cambios rápidos. Yo uso Enlace Shell Extension , pero sólo se puede utilizar el mklinkcomando de este modo: mklink /J C:\Wow "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow".
Charles Grunwald
10

Puede sortear esta limitación utilizando la notación \\? \ C:. Es feo, pero admite longitudes de archivo de hasta 2 ^ 15.

http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#maxpath

Chris K
fuente
2
Sí, lo leí, como dije (ver mi enlace). Pero, ¿cómo me beneficio exactamente? ¿Puedo asignar un disco a \\? \ Algo por ejemplo. No entiendo. El artículo está destinado a programadores que usan API de Windows. Si bien codifico en .NET cuando surge la necesidad, no uso C ++, etc., y no puedo ver cómo esto es relevante para el personal de mis clientes que usan el explorador de Windows y el diálogo de archivo común, etc.
Christopher Edwards,
1
En definitiva, no hay ninguno. :-/ Tristemente.
Chris K
@ChristopherEdwards Puede crear uniones a puntos inferiores en la jerarquía de carpetas.
Hubert Kario el
1
@ChristopherEdwards podría hacer un enlace c:\usr-dataa `c: \ Users \ VeryLongUserName \ LongFolderName` y decirle que use el primero, pero si regularmente nombra carpetas en caracteres de 40 y tantos, esto no ayudará ...
Hubert Kario
2
7-zip felizmente navegará y copiará en \\? \ C: notación, por lo que vale.
Matt Lyons
9

Microsoft ahora tiene una solución disponible para este comienzo con Windows 10, que se explica en el artículo de MSDN Naming Files, Paths and Namespaces .

darthcoder ya respondió con detalles sobre la solución de la \\?\C:notación, pero ahora hay una clave de registro en la HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)que se puede usar para eliminar las limitaciones de MAX_PATH para un solo sistema. El artículo también menciona el soporte para el control de la Política de grupo en la Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long pathsorganización o la implementación de todo el grupo si es necesario.

JimNim
fuente
No he tenido tiempo para realizar pruebas exhaustivas, pero hasta ahora he visto resultados mixtos con esta solución, y no puedo confirmar que esto resuelva el problema para Windows [file] Explorer.
JimNim
2
Esto no funciona en el Explorador de archivos porque aunque el sistema y NTFS pueden manejar rutas largas, el Explorador no puede hacerlo hasta que se vuelva a codificar.
ingyhere
PD: necesitará usar uno de los programas de copia en este enlace SO en la parte superior del Explorador para que realmente funcione.
ingyhere
1
Buena informacion! Probablemente me limitaré a Robocopy en ese caso.
JimNim