Как Windows решает/обрабатывает краткое название DOS какого-либо данного файла?

Если вы используете обратные кавычки вместо кавычек в аргументах match_fun, это должно сработать.

match_fun = list (backtick == backtick, backtick> backtick, backtick

backtick = `

11
задан Matt Refghi 27 November 2008 в 15:32
поделиться

4 ответа

Короткое имя файла создается с файлом. Работы алгоритма как это (обычно, но см. ответ 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 */
}

Это означает, что, после того как файл создается, это сохранит свое краткое название, пока это не будет удалено.

Как только файл удален, краткое название может использоваться снова.

При перемещении файла где-то в другом месте это может получить новое краткое название (например, Вы перемещаете c:\somefilewithlongname.txt ("c:\somefi~1.txt") в d:\stuff\somefilewithlongname.txt, если будет d:\stuff\somefileelse.txt ("d:\stuff\somefi~1.txt"), краткое название перемещенного файла будет somefi~2.txt). Кажется, что краткое название является только персистентным в рамках данного каталога на данной машине.

Так: короткие имена файлов будут сгенерированы файловой системой, обычно методом, обрисованным в общих чертах выше. Лучше предположить, что короткие имена файлов не являются персистентными, поскольку c:\longfi~1.txt на одной машине мог бы быть "c:\longfilename.txt", тогда как на другом это мог бы быть "c:\longfish_story.txt"; также, когда файл удален, краткое название сразу доступно снова.

5
ответ дан 3 December 2019 в 07:39
поделиться

На вашем месте я никогда не полагался бы ни на какую версию никакого драйвера файловой системы (быть этим Microsoft, быть этим другая ОС), чтобы быть последовательным об алгоритме, который это использует для генерации коротких имен файлов. Точное поведение Microsoft Fastfat и драйверов NTFS "официально" не документируется (за исключением обзоров несколько высокого уровня), таким образом не часть контракта API. Какие работы сегодня не могли бы работать завтра при обновлении драйвера.

Кроме того, нет абсолютно никакого требования, чтобы краткие названия содержали символы тильды - см., например, это сообщение Raymond Chen.

Существует ценный клад информации, которая будет найдена об этой теме в блогах MSDN - например:

Кроме того, не полагайтесь на единственное присутствие алфавитно-цифровых символов. Посмотрите на драйвер VFAT Linux, который говорит, например, что любая комбинация прописных букв, цифр и следующих символов допустима: % $ '' - {} ~! # () и _ ^. NTFS будет работать в режиме эмуляции с этим...

8
ответ дан 3 December 2019 в 07:39
поделиться

Я полагаю, что MS-DOS хранит ассоциацию между длинным и кратким названием в на файл каталога.

Это не делает зависит от даты/времени.

При перемещении файлов в новый каталог... это сбросит алгоритм, упомянутый Piskvor, применяет себя снова

В новом каталоге (после перемещения), Вы доберетесь:

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

даже при том, что alongfilename2.txt был первоначально создан треть.

3
ответ дан 3 December 2019 в 07:39
поделиться

В этой ссылке говорится, как NTFS делает это. Я предположил бы, что это - все еще та же идея о более поздней версии.

В Windows 2000 и FAT и NTFS используют набор символов Unicode для их имен, которые содержат несколько запрещенных символов, которые не может считать MS-DOS. Для генерации короткого ЧИТАЕМОГО MS-DOS имени файла Windows 2000 удаляют все эти символы от LFN и удаляют любые пробелы. Поскольку ЧИТАЕМОЕ MS-DOS имя файла может иметь только один период, Windows 2000 также удаляют все дополнительные времена из имени файла. Затем, Windows 2000 усекают имя файла, при необходимости, к шести символам и добавляют тильду (~) и число. Например, каждое название недубликата файла добавляется с ~1. Дубликат файла называет конец с ~2, затем ~3, и так далее. После того, как имена файлов являются усеченными, расширения файла являются усеченными к трем или меньшему количеству символов. Наконец, при отображении имен файлов в командной строке, Windows 2000 переводят все символы в имени файла и расширении верхнего регистра.

0
ответ дан 3 December 2019 в 07:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: