Как назначаются цифры после ~ в коротких именах файлов Windows?

Как назначаются цифры после ~ в коротких именах файлов Windows?

Windows по-прежнему использует ~для сокращения файлов и каталогов с длинными именами. Вы можете увидеть "короткое" имя, введя его dir /Xв командной строке.

Мой вопрос: как присваиваются цифры коротким именам файлов? Похоже, что это не алфавитный порядок и не работает по времени создания файла.

Например:

Я создаю новый текстовый файл:C:\reallylongfilenameB.txt

Затем я запускаю dir /Xи вижу, что короткое имя файла B —REALLY~1.TXT

Создаю второй текстовый файл:C:\reallylongfilenameA.txt

Затем я запускаю dir /Xи вижу, что короткое имя файла А —REALLY~2.TXT

Затем я перевожу часы на день назад, удаляю C:\reallylongfilenameA.txtи создаю заново, по сути, устанавливая дату создания на C:\reallylongfilenameA.txt1 день раньше C:\reallylongfilenameB.txt.

Я бегу dir /X, а C:\reallylongfilenameA.txtкороткое имя все еще REALLY~2.TXT.

Учитывая этот пример, есть ли способ сделать короткое имя C:\reallylongfilenameA.txtbe REALLY~1.TXT?

решение1

Насколько я понимаю, NTFS автоматически назначает постоянные имена файлов 8.3 при создании. Когда вы запускаете dir /X, он не сокращает имена файлов на лету, он ищет предопределенные короткие имена.

Источник:http://en.wikipedia.org/wiki/8.3_имя_файла

решение2

Как указал Джек в своем ответе, короткое имя назначается при создании файла (или переименовании, или перемещении). Значение зависит как от длинного имени файла, так и от того, какие другие короткие имена уже существуют.

Точный алгоритм назначения коротких имен недокументирован, и нет гарантии, что алгоритм останется постоянным между версиями Windows или даже между различными форматами систем хранения. Вам не следует писать код, который зависит от какого-либо конкретного алгоритма назначения коротких имен.

Существуют как ограничения дизайна, так и ошибки, возникающие из-за коротких имен файлов. Примером ограничения дизайна является del *.txtвозможность удаления файла с именем, something.txt2поскольку расширение короткого имени, вероятно, будет .txt, а исходные маски рассматривают как длинные, так и короткие имена. См. раздел под названием"ОШИБКА - Короткие имена файлов 8.3 могут нарушить параметры /D и /S"вКаковы недокументированные возможности и ограничения команды Windows FINDSTR?для примера ошибки, возникающей из-за коротких имен.

Тома NTFS могут иметь отключенные короткие имена файлов (короткие имена, которые существовали до их отключения, останутся). Многие люди (организации) отключают короткие имена в своих системах из-за проблем, которые они могут вызвать.

Обновлять

Вот убедительный аргумент в пользу того, почему попытки установить алгоритм генерации коротких имен файлов являются пустой тратой времени:FSUTIL позволяет указать любое короткое имя для файла, если оно еще не существует в этой папке.

Вот соответствующая справочная документация 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

Связанный контент