Pregunta

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

Bien. Parece estar asignando el " ~ # " según la fecha / hora en que creé el archivo. ¿Es esto correcto?

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

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

¿Cuándo se liberará esa ID (en este caso, ~ 1) para usar en otro nombre corto? ¿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 particularmente preocupado por las instalaciones cuyas acciones personalizadas utilizan nombres cortos de DOS.

Gracias, muchachos.

¿Fue útil?

Solución

El nombre de archivo corto se crea con el archivo. El algoritmo funciona así (generalmente, pero vea 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 creado el archivo, mantendrá su nombre corto hasta que se elimine.

Tan pronto como se elimine el archivo, el nombre corto se puede volver a usar.

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 corto del archivo movido será somefi ~ 2.txt). Parece que el nombre corto solo es persistente dentro de un directorio dado en una máquina determinada.

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

Otros consejos

Si yo fuera usted, nunca confiaría en ninguna versión de cualquier controlador de sistema de archivos (ya sea de Microsoft, ya sea de otro sistema operativo) para ser coherente con el algoritmo que utiliza para generar nombres de archivo cortos . El comportamiento exacto de los controladores Microsoft Fastfat y NTFS no es oficialmente documentado (excepto como descripciones generales de alto nivel) por lo tanto no son parte del contrato 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 sobre este tema en los blogs de MSDN, por ejemplo:

Además, no confíe en la sola presencia de caracteres alfanuméricos. Mire el Controlador VFAT de Linux que dice, por ejemplo, que cualquier combinación de letras mayúsculas, $, dígitos, caracteres, letras y letras ~! # () & amp; _ ^. NTFS funcionará en modo de compatibilidad con eso ...

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

No depende de la fecha / hora.

Si mueve sus archivos a un nuevo directorio ... esto restablecerá el algo mencionado por Piskvor 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.

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 usan   el conjunto de caracteres Unicode para su   nombres, que contienen varios prohibidos   caracteres que MS-DOS no puede leer. A   generar un archivo corto legible para MS-DOS   nombre, Windows 2000 elimina todos   estos personajes de la LFN y   elimina cualquier espacio Porque un   El nombre de archivo legible para 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   se agrega un nombre de archivo no duplicado   con ~ 1. Los nombres de archivo duplicados terminan   con ~ 2, luego ~ 3, y así sucesivamente. Después   los nombres de archivo se truncan, el archivo   las extensiones de nombre se truncan a tres   o menos personajes. Finalmente cuando   mostrar nombres de archivo en el comando   línea, Windows 2000 traduce todo   caracteres en el nombre del archivo y   extensión a mayúsculas.

Cuando los archivos son provistos por un servidor de red que ejecuta Samba, el servidor genera los nombres cortos 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top