Si trabaja con Windows 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 moverlo a un nuevo destino o incluso eliminarlo. ¿Cual es el trato?
¡Hola, How-To Geek!
Así que el otro día estaba reorganizando algunos archivos en mi computadora, creando carpetas, ese tipo de cosas. Luego, cuando estaba moviendo algunos archivos a una carpeta, recibo un mensaje que indicaba que la ruta de la carpeta resultante sería demasiado larga. Estaba confundido. Sé que todos los sistemas operativos desde DOS admiten nombres de archivo largos, pero Windows afirma que la ruta es demasiado larga. ¿Por qué pasó esto?
Sinceramente
Sr. desorganizado
El problema con el que se está encontrando es una desafortunada intersección de dos sistemas que, en casos como este, produce un error. Para comprender exactamente de dónde proviene el error, debemos profundizar en el historial de nombres largos de archivo (LFN) y cómo Windows interactúa con ellos antes de profundizar en las soluciones.
Los nombres de archivo largos se introdujeron, a través de la arquitectura subyacente de MS-DOS, en Windows 95. El nuevo sistema LFN permitía nombres de archivos y directorios de hasta 255 caracteres. Esta fue una expansión bienvenida del sistema de nombres de archivos anterior, generalmente llamado nombre de archivo 8.3 porque el nombre estaba limitado a ocho caracteres y una extensión de tres dígitos, pero también conocido como nombre de archivo corto (SFN). Como puede imaginar, en ese entonces todavía había muchas aplicaciones basadas en DOS y había más de unos pocos dolores de cabeza al tratar de hacer que los LFN más nuevos y los SFN heredados funcionaran bien entre sí. Si alguna vez te has encontrado con un disquete o CD-ROM más antiguo con archivos extrañamente truncados (como abcdef ~ 1.txt), ese nombre de archivo fue eliminado por alguna aplicación heredada que usaba SFN de algún LFN más largo y no compatible (como abcdefghijk. TXT).
Sin embargo, estamos muy lejos de mediados de la década de 1990, y todo el asunto del nombre de archivo largo está (en su mayor parte) firmemente resuelto. Si está ejecutando una versión de Windows de los últimos 10 años, es probable que nunca haya encontrado un conflicto de longitud de nombre de archivo como solíamos encontrar en los días de DOS / Windows 95. Dicho esto, todavía tenemos contratiempos, como descubrió con su proyecto de limpieza de disco. ¿Pero por qué? Si el sistema de nombre de archivo largo de Windows admite carpetas y nombres de archivo de hasta 255 caracteres por componente, ¿con qué muro se encuentra? No podemos culpar a NTFS (el sistema de archivos que usa la gran mayoría de las máquinas modernas con Windows) ya que NTFS admitirá un encadenamiento de carpetas y nombres de archivos hasta una longitud total de ruta de 32,767 caracteres. Eso supera con creces la estructura de directorio típica que la mayoría de los usuarios necesitarían.
Donde todo se desmorona es una restricción artificial que Windows apila sobre el sistema LFN / NTFS: la variable MAX_PATH. La variable MAX_PATH especifica que una estructura de directorio completa en Windows no puede superar los 260 caracteres en total, incluida la letra de la unidad, los dos puntos, la barra invertida y la contragolpe nula al final. Por lo tanto, solo tiene un MAX_PATH real potencial de 256 caracteres, por ejemplo, C: \ your-256-character-path \ .
Entonces, lo que sucedió cuando estaba limpiando su computadora es que tenía un directorio con una ruta ya 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ás de esos directorios en otro directorio con una ruta larga, la longitud total del nombre de la ruta excedió 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! » Por desgracia, no es tan simple. La variable MAX_PATH no solo está esencialmente codificada en Windows, sino que incluso si pasara por la enorme molestia de cambiarla, terminaría rompiendo tanto que no valdría la pena. Demasiadas aplicaciones esperan que la variable de ruta sea lo que Windows ha especificado durante mucho tiempo. No podemos simplemente cambiarlo sin crear un lío enorme.
¿Dónde te deja eso? Bueno, la solución más simple es simplemente editar los datos de la ruta. Por ejemplo, si tiene una tonelada de artículos guardados donde la aplicación / extensión que usó para guardarlos de la web creó un directorio que era el título completo del artículo + el encabezado del artículo, y luego el nombre del archivo en sí es el título completo del artículo + el encabezado del artículo, sería muy sencillo alcanzar o superar el MAX_PATH con un solo guardado. Editar 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 eliminar una tonelada de directorios antiguos que son demasiado largos para que Windows los maneje cuando están restringidos por la variable MAX_PATH) , hay una solución alternativa en la línea de comandos. 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 tendrían que lidiar con nombres de ruta más largos. Como tal, la API de Windows tiene una función para lidiar con rutas extremadamente largas.
Para aprovechar esa API y usar herramientas de línea de comando en sus carpetas / nombres de archivo difíciles de manejar, simplemente necesita agregar el nombre del directorio con algunos caracteres adicionales. Por ejemplo, si tenía una estructura de directorio enorme que deseaba eliminar (pero recibió un error debido a la longitud de la ruta cuando lo intentó), podría cambiar el comando de:
rmdir c:\documents\some-really-super-long-folder-name-scheme\
a:
rmdir \\?\c:\documents\some-really-super-long-folder-name-scheme\
La clave es la adición de la \\?\
parte antes del inicio de la ruta del archivo; esto indica a Windows que ignore las limitaciones impuestas por la variable MAX_PATH y que interactúe con la ruta que acaba de proporcionar tal como la proporciona / entiende directamente el sistema de archivos subyacente (que claramente puede admitir una ruta más larga). Como siempre, tenga cuidado en el símbolo del sistema para evitar eliminar accidentalmente archivos o directorios que pretendía dejar intactos.
Si nuestra descripción general de este problema le tiene curiosidad, definitivamente profundice en este artículo de la biblioteca de Microsoft Developer Network, Archivos de nombres, rutas y espacios de nombres , para obtener más información sobre lo que está sucediendo bajo el capó.
¿Tiene una pregunta tecnológica urgente? Envíenos un correo electrónico a [email protected] y haremos todo lo posible para responderlo.