Como os dígitos após ~ são atribuídos nos nomes curtos de arquivos do Windows?

Como os dígitos após ~ são atribuídos nos nomes curtos de arquivos do Windows?

O Windows ainda usa ~para encurtar arquivos e diretórios com nomes longos. Você pode ver o nome “abreviado” digitando dir /Xno prompt de comando.

Minha pergunta é como são atribuídos os dígitos aos nomes curtos dos arquivos? Não parece estar em ordem alfabética nem parece funcionar na hora de criação do arquivo.

Por exemplo:

Eu crio um novo arquivo de texto:C:\reallylongfilenameB.txt

Então corro dir /Xe vejo que o nome abreviado do arquivoB éREALLY~1.TXT

Eu crio um segundo arquivo de texto:C:\reallylongfilenameA.txt

Então corro dir /Xe vejo que o nome abreviado do arquivoA éREALLY~2.TXT

Então atrasei o relógio um dia, excluí C:\reallylongfilenameA.txte recriei-o, essencialmente tornando a data de criação de C:\reallylongfilenameA.txt1 dia antes C:\reallylongfilenameB.txt.

Eu corro dir /Xe C:\reallylongfilenameA.txto nome curto ainda é REALLY~2.TXT.

Dado este exemplo, existe alguma maneira de tornar o nome abreviado C:\reallylongfilenameA.txtbe REALLY~1.TXT?

Responder1

Pelo que entendi, o NTFS atribui automaticamente nomes de arquivos 8.3 persistentes na criação. Quando você executa dir /X, ele não encurta nomes de arquivos instantaneamente, mas procura nomes abreviados pré-atribuídos.

Fonte:http://en.wikipedia.org/wiki/8.3_filename

Responder2

Como Jack apontou em sua resposta, o nome abreviado é atribuído quando o arquivo é criado (ou renomeado ou movido). O valor depende tanto do nome longo do arquivo quanto de outros nomes curtos já existentes.

O algoritmo exato de atribuição de nomes abreviados não está documentado e não há garantia de que o algoritmo permaneça constante entre versões do Windows ou mesmo entre diferentes formatos de sistema de armazenamento. Você não deve escrever código que dependa de qualquer algoritmo específico de atribuição de nomes curtos.

Existem limitações de design e bugs que surgem de nomes de arquivos curtos. Um exemplo de limitação de design é del *.txta possibilidade de excluir um arquivo nomeado something.txt2porque a extensão do nome abreviado provavelmente será .txt, e as máscaras de origem examinam nomes longos e curtos. Veja a seção intitulada"BUG - Nomes de arquivos curtos 8.3 podem quebrar as opções /D e /S"noQuais são os recursos e limitações não documentados do comando FINDSTR do Windows?para ver um exemplo de bug resultante de nomes curtos.

Os volumes NTFS podem ter nomes de arquivos curtos desabilitados (os nomes curtos que existiam antes de serem desabilitados permanecerão). Muitas pessoas (organizações) desativam nomes curtos em seus sistemas devido aos problemas que podem causar.

Atualizar

Aqui está um argumento definitivo sobre por que é uma perda de tempo tentar estabelecer o algoritmo de como os nomes curtos de arquivos são gerados -FSUTIL permite que você especifique qualquer nome abreviado desejado para um arquivo, desde que ele ainda não exista nessa pasta.

Aqui está a documentação de ajuda relevante do FSUTIL

C:\test>fsutil file
---- FILE Commands Supported ----

findbysid               Find a file by security identifier
queryallocranges        Query the allocated ranges for a file
setshortname            Set the short name for a file
setvaliddata            Set the valid data length for a file
setzerodata             Set the zero data for a file
createnew               Creates a new file of a specified size
queryfileid             Queries the file ID of the specified file
queryfilenamebyid       Displays a random link name for the file ID

C:\test>fsutil file setshortname /?
Usage : fsutil file setshortname <filename> <shortname>
   Eg : fsutil file setshortname C:\testfile.txt testfile

informação relacionada