2008-11-27 7 views
10

Tengo una carpeta con estos archivos:¿Cómo determina Windows/maneja el nombre abreviado de DOS de cualquier archivo dado?

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

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

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

Ahora, si añado 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 

Bien. 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 usarla 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, muchachos.

Respuesta

5

El nombre de archivo corto se crea con el archivo. El algoritmo funciona de la siguiente (por lo general, pero ver moocha's reply):

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, que mantendrá su nombre corto hasta que sea eliminado.

Tan pronto como se borre el archivo, el nombre abreviado se podrá volver a utilizar.

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.

Por lo tanto, 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.

+0

también espacios son despojados y extensión se acorta a 3 caracteres –

3

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 va a restablecer el mencionado algo por sí Piskvor se aplica de nuevo

En el nuevo directorio (después de un movimiento), se obtiene:

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

a pesar de que inicialmente alongfilename2.txt se ha creado tercero.

0

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

En Windows 2000, FAT y NTFS utiliza el conjunto de caracteres Unicode por sus nombres , que contienen varios prohibidos caracteres que MS-DOS no puede leer. Para generar un archivo corto legible por MS-DOS nombre, Windows 2000 borra todos los estos caracteres de LFN y elimina los espacios. Dado que 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 de 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 anexa con ~ 1. Los nombres de archivos duplicados terminan en con ~ 2, luego ~ 3, y así sucesivamente. Después de , los nombres de los archivos se truncan, las extensiones de nombre del archivo se truncan en tres o menos caracteres. Finalmente, cuando muestra los nombres de archivos en la línea de comando , Windows 2000 traduce todos los caracteres en el nombre del archivo y la extensión a mayúsculas.

8

Si yo fuera usted, me gustaría Nunca baso en cualquier versión de los controladores del sistema de archivos (ya sea de Microsoft, ya sea de otro OS) para ser coherente sobre el algoritmo que utiliza para generar nombres de archivo cortos. 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 de tilde; consulte, por ejemplo, this post by Raymond Chen.

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

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

+1

Sí, y los volúmenes proporcionados por Samba no usar nombres cortos predecibles. –

0

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 asumir 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 
Cuestiones relacionadas