Página principal » cómo » ¿Por qué Windows está informando que esta carpeta es demasiado larga para copiar?

    ¿Por qué Windows está informando que esta carpeta es demasiado larga para copiar?

    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 moverse a un nuevo destino o incluso eliminar. Cual es el trato?

    Hey, cómo hacer 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 indica que la ruta de la carpeta resultante sería demasiado larga. Estaba confundido. Sé que todos los sistemas operativos desde DOS son compatibles con los nombres de archivo largos, pero ¿Windows afirma que la ruta es demasiado larga? Por qué pasó esto?

    Sinceramente,

    Señor desorganizado

    El problema con el que se encuentra 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, debemos profundizar en la historia de los nombres de archivo largos (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 permitió 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 se 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 tratando de hacer que los LFN más nuevos y los SFN heredados jugaran bien entre ellos. Si alguna vez ha encontrado un disquete o un CD-ROM más antiguo con archivos extrañamente truncados (como abcdef ~ 1.txt), el nombre del archivo fue cortado por alguna aplicación heredada de 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, en su mayor parte, todo el asunto del nombre de archivo largo está totalmente 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 el que solíamos encontrarnos en los días DOS / Windows 95. Dicho esto, todavía tenemos problemas, como descubrió con su proyecto de limpieza de disco. ¿Pero por qué? Si el sistema de nombres de archivo largos de Windows admite carpetas y nombres de archivos de hasta 255 caracteres por componente, ¿en 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 admite el encadenamiento de carpetas y nombres de archivos hasta una longitud total de 32,767 caracteres. Eso supera con creces la típica estructura de directorios que la mayoría de los usuarios necesitarían.

    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 directorios completa en Windows no puede exceder los 260 caracteres totales, incluida la letra de la unidad, los dos puntos, la barra invertida y la barra diagonal nula al final. Por lo tanto, solo tiene un potencial MAX_PATH real de 256 caracteres, por ejemplo,. C: \ su-ruta de 256 caracteres \.

    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 esos directorios en otro directorio con una ruta larga, la longitud total del nombre de ruta excedió el límite de 260 caracteres impuesto por la variable MAX_PATH.

    Ahora, puedes estar pensando "Ah-hah! ¡Solo cambiaremos la variable MAX_PATH y resolveremos el problema! "Desafortunadamente, no es tan simple. La variable MAX_PATH no solo es 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 especificó durante mucho tiempo. No podemos simplemente cambiarlo sin crear un desorden 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 desde 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 artículo principal, sería realmente 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 borrar una tonelada de directorios antiguos que son demasiado largos para que Windows los resuelva cuando están restringidos por la variable MAX_PATH), existe una solución de la línea de comandos. A pesar de que 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 tratar con rutas extremadamente largas.

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

    rmdir c: \ documents \ some-realmente-super-carpeta-nombre-esquema-largo

    a:

    rmdir \\? \ c: \ documents \ some-realmente-super-carpeta-nombre-esquema-largo \

    La clave es la adición de la \\? \ parte antes del inicio de la ruta del archivo; esto le indica a Windows que ignore las limitaciones impuestas por la variable MAX_PATH y que interactúe con la ruta que acaba de proporcionar como fue suministrada / entendida directamente por el sistema de archivos subyacente (que puede admitir claramente una ruta más larga). Como siempre, tenga cuidado en el símbolo del sistema para evitar la eliminación accidental de archivos o directorios que pretendía dejar intactos.

    Si nuestra descripción general de este problema lo tiene curioso, indague 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 debajo del capó..


    ¿Tiene una pregunta técnica urgente? Envíenos un correo electrónico a [email protected] y haremos todo lo posible para responderlo..