Limitación de nombre de ruta de 256 caracteres de ventana

17

después de una larga investigación, finalmente descubrí que los nombres de ruta no pueden tener más de 256 caracteres, incluso en el último Microsoft Windows 7. Realmente no entiendo por qué hay una limitación tan estúpida, ya que NTFS puede manejar hasta ~ 32,000 caracteres de ruta longitud sin ningún problema desde hace más de una docena de años! ¿No hay ninguna posibilidad de cambiar eso? ¿O hay alguna solución práctica para evitar eso?

260 caracteres son muy pocos, incluso para casos de uso simples, como algunos directorios de fotos anidados con nombres largos de archivo.

HopelessN00b
fuente
1
Creo que la preocupación es que hay programas antiguos que tienen una idea codificada de la longitud de una ruta, de modo que si intenta usarlos en rutas más largas, explotarán de maneras interesantes.
dsolimano
¿Los sistemas operativos Linux tienen este problema?
ahorn

Respuestas:

18

De acuerdo con Microsoft:

  • La API tradicional de Windows limita los nombres de ruta a 260 caracteres, incluso para aplicaciones desarrolladas para la última versión.

  • Las aplicaciones que usan la API compatible con Unicode pueden usar una forma de ruta que permite hasta 32767 caracteres. El nombre del archivo debe tener el prefijo \\?\y debe ser una ruta absoluta, por ejemplo, \\?\c:\dir\fileo \\?\UNC\server\share\file. Existen otras limitaciones, consulte la referencia para más detalles.

Si ha logrado crear y utilizar una jerarquía de archivos profunda y necesita trabajar con una aplicación que bombardea debido a la longitud del nombre del archivo, hay algunas cosas que puede probar:

  • Use el mklinkcomando para crear enlaces simbólicos y pase una ruta que los use a su aplicación.

  • Use el substcomando para asignar una letra de unidad a un directorio.

  • Inicie su aplicación desde un directorio profundo y pásele rutas relativas cortas.

  • Reemplace algunos nombres largos por sus alias 8.3 ( micros~1), suponiendo que todavía existan en Windows 7. Si tiene al micros~1lado micros~2, no sé cómo saber cuál es cuál; tal vez ejecute DOS command.com(nuevamente, suponiendo que Windows 7 aún pueda hacerlo).

Gilles 'SO- deja de ser malvado'
fuente
3
Bueno, ¡incluso el Explorador de Windows de Win7 parece usar la API tradicional! Eso es una lástima.
3
Aún más barras invertidas `\\? \` :-)
Anillo Ø
@Gilles, ¿Micros ~ 1 y micros ~ 2 están estandarizados en todos los sistemas o son aleatorios?
Pacerier
@Pacerier Cualquiera que sea el directorio creado primero micros~1, entonces es esencialmente aleatorio.
Gilles 'SO- deja de ser malvado'
0

Puede usar los nombres cortos (8.3) para todas sus carpetas y archivos.

Sin embargo, debe asegurarse de que estén habilitados.

Se considera que un nombre de archivo largo es cualquier nombre de archivo que exceda la convención de nomenclatura de estilo MS-DOS corta (también llamada 8.3). Por lo general, Windows almacena nombres largos de archivos en el disco como entradas de directorio especiales, que pueden deshabilitarse en todo el sistema por razones de rendimiento según el sistema de archivos en particular. Cuando crea un nombre de archivo largo, Windows también puede crear una forma corta 8.3 del nombre, llamado alias 8.3, y también almacenarlo en el disco. Este alias 8.3 se puede deshabilitar para un volumen específico.

(mi negrita)

También tendrá que escribir un código para obtener el nombre corto del nombre largo.

Fuente

ChrisF
fuente
2
jajaja ... ¡Puedo recordar estos días en Windows 95 cuando todos obtuvimos este FAT32 super duper con 256 nombres de archivo largos! Eso fue fantástico (en estos días) y estoy realmente sorprendido de que las limitaciones de nombre de archivo aún puedan ser un problema en estos días. 2010! Windows es realmente arcaico ...
0

El nombre del archivo / directorio en NTFS está limitado a 255 puntos de código unicode, ya que la longitud se almacena como un byte. Pero no hay un límite inherente de la longitud total de la ruta.

Muchas llamadas a la API de Win32 (incluido el shell del explorador) tienen el límite de longitud 260-1. Algunas otras llamadas tienen la capacidad de usar el prefijo \\? \ Para obtener hasta 32K (un poco menos, ya que el nombre del volumen se sustituye en Kernel-land)

Dominik Weber
fuente