22Aug

¿Por qué Windows informa que esta carpeta es demasiado larga para copiar?

Si trabaja con Windows durante el tiempo suficiente, especialmente con carpetas y archivos que tienen nombres largos, se encontrará con un error extraño: Windows informará que la ruta de la carpeta o el nombre del archivo es demasiado largo para moverse a un nuevo destino o incluso eliminar.¿Cual es el trato?

¡Hola, geek!

Así que el otro día estaba reorganizando algunos archivos en mi computadora, creando carpetas, ese tipo de cosas. Luego, cuando movía algunos archivos a una carpeta, recibí un mensaje que decía que la ruta de la carpeta resultante sería demasiado larga. Estaba confundido. Sé que cada sistema operativo desde DOS admite nombres de archivo largos, pero Windows afirma que la ruta es demasiado larga.¿Por qué pasó esto?

Sincerly,

Sr. Disorganized

El problema que se está encontrando es una desafortunada intersección de dos sistemas que, en casos como este, produce un error. Para entender exactamente de dónde viene el error, necesitamos profundizar en el historial de los nombres largos de archivos( LFN) y cómo Windows interactúa con ellos antes de profundizar en las soluciones.

Los nombres largos de archivo se introdujeron, a través de la arquitectura subyacente de MS-DOS, en Windows 95. El nuevo sistema LFN permitió nombres de archivos y directorios de hasta 255 caracteres. Esta fue una expansión bienvenida del sistema anterior de nombre de archivo, generalmente llamado 8.3 filenaming porque el nombre estaba limitado a ocho caracteres y una extensión de tres dígitos, pero también conocido como nombre corto de archivo( SFN).Como se puede imaginar, en aquel entonces todavía había muchas aplicaciones basadas en DOS y había más que unos pocos dolores de cabeza tratando de hacer que los nuevos LFN y los SFN heredados jugaran bien entre ellos. Si alguna vez se encontró con un disquete o CD-ROM más antiguo con archivos extrañamente truncados( como abcdef ~ 1.txt) ese nombre de archivo fue cortado por alguna aplicación heredada que usaba SFN de un LFN más largo y sin soporte( como abcdefghijk. TXT).

Sin embargo, estamos muy lejos de mediados de la década de 1990, y todo el asunto Long Filename está( en su mayor parte) firmemente resuelto. Si está ejecutando una versión de Windows de los últimos 10 años, probablemente nunca haya encontrado un conflicto de longitud de nombre de archivo como el que solíamos encontrar en los días DOS / Windows 95.Dicho esto, todavía encontramos hipo, como descubriste con tu proyecto de limpieza de disco.¿Pero por qué?Si el sistema Long Filename de Windows admite carpetas y nombres de archivos de hasta 255 caracteres por componente, ¿con qué pared se está ejecutando? No podemos culpar a NTFS( el sistema de archivos que usa la gran mayoría de las máquinas modernas de Windows) ya que NTFS admitirá un encadenamiento de carpetas y nombres de archivos de hasta una longitud total de ruta de 32.767 caracteres. Eso supera con creces la típica estructura de directorios que la mayoría de los usuarios necesitarían alguna vez.

Donde todo se derrumba es una restricción artificial de pilas de Windows en la parte superior del sistema LFN / NTFS: la variable MAX_PATH.La variable MAX_PATH especifica que una estructura de directorio completa en Windows no puede exceder los 260 caracteres en total, incluida la letra de la unidad, los dos puntos, la barra invertida y el juego nulo al final. Por lo tanto, solo tiene una potencial MAX_PATH real de 256 caracteres, p. C: \ your-256-character-path \ .

Entonces, lo que sucedió cuando limpiaba su computadora es que tenía un directorio con una ruta larga( ya sea porque los nombres de las carpetas eran largos, los nombres de los archivos eran largos, o ambos), y cuando intentó mover uno o másde esos directorios en otro directorio con una ruta larga, la longitud total del nombre de ruta superó el límite de 260 caracteres impuesto por la variable MAX_PATH.

Ahora, puedes estar pensando "Ah-hah!¡Simplemente cambiaremos la variable MAX_PATH y resolveremos el problema! "Desafortunadamente, no es tan simple. La variable MAX_PATH no solo está esencialmente codificada en Windows, sino que incluso si pasas por la enorme molestia de cambiarla, terminarías rompiendo tanto que no valdría la pena. Demasiadas aplicaciones esperan que la variable de ruta sea lo que Windows ha especificado por mucho tiempo. No podemos simplemente cambiarlo sin crear un desastre enorme.

¿Dónde te deja eso? Bueno, la solución más simple es simplemente editar los datos de ruta. Por ejemplo, si tiene una tonelada de artículos guardados donde la aplicación / extensión que utilizó para guardarlos de la web creó un directorio que era el título completo del artículo + el artículo líder, y luego el nombre del archivo en sí es el título completodel artículo + el plomo del artículo, sería muy simple llegar o superar el MAX_PATH con un solo guardado. La edición de esos enormes títulos de carpetas y artículos a un tamaño más razonable es una manera fácil de solucionar el problema.

Si tiene una gran cantidad de archivos con una ruta larga y no desea editarlos todos( o si desea , elimine una tonelada de directorios antiguos que son demasiado largos para que Windows los maneje cuando estén restringidos por elVariable MAX_PATH), hay una línea de comando que funciona. Aunque Windows está restringido por la variable MAX_PATH, los ingenieros de Windows se dieron cuenta de que habría situaciones en las que los usuarios necesitarían tratar con nombres de ruta más largos. Como tal, la API de Windows tiene una función para manejar rutas extremadamente largas.

Para aprovechar esa API y utilizar herramientas de línea de comandos en sus carpetas / nombres de archivos difíciles de manejar, solo necesita agregar el nombre del directorio con algunos caracteres adicionales. Por ejemplo, si tenía una enorme estructura de directorios que quería eliminar( pero recibió un error debido a la longitud de la ruta cuando lo intentó), puede cambiar el comando de:

rmdir c: \ documents \ some-really-super-long-folder-name-scheme \

to:

rmdir \\? \ c: \ documents \ some-really-super-long-folder-name-scheme \

La clave es la adición de la porción \\? \antes del inicio de la ruta del archivo;esto instruye a Windows para que no tenga en cuenta las limitaciones impuestas por la variable MAX_PATH e interactúe con la ruta que acaba de proporcionar tal como la proporciona / entiende directamente el sistema de archivos subyacente( que puede admitir claramente una ruta más larga).Como siempre, tenga precaución en el símbolo del sistema para evitar borrar accidentalmente los archivos o directorios que tenía la intención de dejar intactos.

Si nuestra descripción general de este tema le resulta curioso, definitivamente investigue este artículo de la biblioteca de Microsoft Developer Network, Naming Files, Paths y Namespaces, para obtener más información sobre lo que sucede bajo el capó.

¿Tiene una pregunta tecnológica apremiante? Mándenos un correo electrónico a [email protected] y haremos nuestro mejor esfuerzo para responderlo.