traduccion too max_path longpathsenabled long length disable windows file filesystems dos

too - ¿Cómo determina Windows/maneja el nombre abreviado de DOS de cualquier archivo dado?



windows disable path length limit (5)

Tengo una carpeta con estos archivos:

alongfilename1.txt <--- created first alongfilename3.txt <--- created second

Cuando ejecuto DIR / x en el símbolo del sistema, veo estos nombres cortos asignados:

ALONGF~1.TXT alongfilename1.txt ALONGF~2.TXT alongfilename3.txt

Ahora, si agrego otro archivo:

alongfilename1.txt alongfilename2.txt <--- created third alongfilename3.txt

Veo esto:

ALONGF~1.TXT alongfilename1.txt ALONGF~3.TXT alongfilename2.txt ALONGF~2.TXT alongfilename3.txt

Multa. Parece que está asignando el "~ #" de acuerdo con la fecha / hora en que creé el archivo. ¿Es esto correcto?

Ahora, si elimino "alongfilename1.txt", los otros dos archivos conservan sus nombres cortos .

ALONGF~3.TXT alongfilename2.txt ALONGF~2.TXT alongfilename3.txt

¿Cuándo se lanzará esa ID (en este caso, ~ 1) para usar en otro shortname? ¿Lo hará alguna vez?

Además, ¿es posible que un archivo en mi máquina tenga un nombre corto de X, mientras que el mismo archivo tiene un nombre corto de Y en otra máquina? Estoy especialmente preocupado por las instalaciones cuyas acciones personalizadas utilizan nombres cortos de DOS.

Gracias chicos.


Creo que MSDOS almacena la asociación entre el nombre largo y el corto en un archivo por directorio.

No depende de la fecha / hora.

Si mueve sus archivos en un nuevo directorio ... esto restablecerá el algo mencionado por Piskvor que se aplica nuevamente

En el nuevo directorio (después de un movimiento), obtendrá:

ALONGF~1.TXT alongfilename1.txt ALONGF~2.TXT alongfilename2.txt ALONGF~3.TXT alongfilename3.txt

a pesar de que alongfilename2.txt se creó inicialmente en tercer lugar.


Si yo fuera usted, nunca confiaría en ninguna versión de ningún controlador de sistema de archivos (ya sea de Microsoft, ya sea en otro sistema operativo) para ser coherente con el algoritmo que utiliza para generar nombres cortos de archivo. El comportamiento exacto de los controladores FastFat y NTFS de Microsoft no está documentado "oficialmente" (excepto como vistas generales de alto nivel), por lo que no forman parte del contrato de la API. Lo que funciona hoy podría no funcionar mañana si actualiza el controlador.

Además, no hay absolutamente ningún requisito de que los nombres cortos contengan caracteres tilde; consulte, por ejemplo, esta publicación de Raymond Chen .

Hay un tesoro de información que se puede encontrar sobre este tema en los blogs de MSDN, por ejemplo:

Además, no confíe en la presencia exclusiva de caracteres alfanuméricos. Mire el controlador Linux VFAT que dice, por ejemplo, que cualquier combinación de letras mayúsculas, dígitos y los siguientes caracteres es válida: $% ''`- @ {} ~! # () Y _ ^. NTFS operará en modo compatibilidad con eso ...


Este enlace dice cómo lo hace NTFS. Supongo que sigue siendo la misma idea en una versión más reciente.

En Windows 2000, tanto FAT como NTFS utilizan el conjunto de caracteres Unicode para sus nombres, que contienen varios caracteres prohibidos que MS-DOS no puede leer. Para generar un nombre corto de archivo legible por MS-DOS, Windows 2000 elimina todos estos caracteres del LFN y elimina los espacios. Como un nombre de archivo legible por MS-DOS puede tener solo un período, Windows 2000 también elimina todos los períodos adicionales del nombre del archivo. A continuación, Windows 2000 trunca el nombre del archivo, si es necesario, a seis caracteres y agrega una tilde (~) y un número. Por ejemplo, cada nombre de archivo no duplicado se agrega con ~ 1. Los nombres de archivos duplicados terminan con ~ 2, luego ~ 3, y así sucesivamente. Después de que los nombres de archivo se truncan, las extensiones de nombre de archivo se truncan a tres o menos caracteres. Finalmente, al mostrar los nombres de los archivos en la línea de comandos, Windows 2000 traduce todos los caracteres en el nombre y la extensión del archivo a mayúsculas.


Cuando los archivos son proporcionados por un servidor de red que ejecuta Samba, los nombres cortos son generados por el servidor y no siguen un patrón predecible.

Por lo tanto, no es seguro suponer que puede predecir la forma del nombre corto.

G:/>dir /x *.txt Directory of G:/ 08/25/2009 12:34 PM 1,848 S2XYYV~1.TXT strace_output.txt 03/01/2010 05:32 PM 325,428 TEY7IH~O.TXT tomcat-dump-march-1.txt 03/11/2010 12:01 AM 5,811 DI356A~S.TXT ddmget-output.txt 01/23/2009 01:03 PM 313,880 DLA94Q~K.TXT ddm-log-fn.txt 04/20/2010 07:42 PM 7,491 A50QZP~A.TXT april-20-2010.txt


El nombre de archivo corto se crea con el archivo. El algoritmo funciona así (por lo general, pero vea la respuesta de moocha ):

counter = 1 stripped_filename = strip_dots(strip_non_ascii_characters(filename)) shortfn = first_6_characters(stripped_filename) while (file_exists(shortfn + "~" + counter + "." + extension)) { increment counter by 1 if more digits are added to counter, shorten shortfn by 1 /* e.g. if counter comes to 9 and shortf~9.txt is taken. try short~10.txt next */ }

Esto significa que una vez que se crea el archivo, mantendrá su nombre corto hasta que se elimine.

Tan pronto como se borre el archivo, el nombre abreviado se puede usar nuevamente.

Si mueve el archivo a otro lugar, puede obtener un nuevo nombre corto (por ejemplo, está moviendo c: / somefilewithlongname.txt ("c: / somefi ~ 1.txt") a d: / stuff / somefilewithlongname.txt, si hay d: / stuff / somefileelse.txt ("d: / stuff / somefi ~ 1.txt"), el nombre abreviado del archivo movido será alguna ~ 2.txt). Parece que el nombre corto solo es persistente dentro de un directorio determinado en una máquina determinada.

Entonces: los nombres cortos de archivo serán generados por el sistema de archivos, generalmente por el método descrito anteriormente. Es mejor suponer que los nombres cortos no son persistentes, ya que c: / longfi ~ 1.txt en una máquina puede ser "c: / longfilename.txt", mientras que en otra podría ser "c: / longfish_story.txt"; Además, cuando se elimina un archivo, el nombre abreviado vuelve a estar disponible de inmediato.