Имя файла 8.3 [1] (также называемое коротким именем файла или SFN ) — это соглашение об имени файла , используемое в старых версиях DOS и версиях Microsoft Windows до Windows 95 и Windows NT 3.5 . Оно также используется в современных операционных системах Microsoft в качестве альтернативного имени файла для длинного имени файла , чтобы обеспечить совместимость с устаревшими программами. Соглашение об именах файлов ограничено файловой системой FAT . Подобные схемы именования файлов 8.3 также существовали в более ранних операционных системах CP/M , TRS-80 , Atari и некоторых миникомпьютерных системах Data General и Digital Equipment Corporation .
Имена файлов 8.3 ограничены максимум восемью символами (после любого указателя каталога), за которыми, при необходимости, следует расширение имени файла , состоящее из точки .
и не более трех дополнительных символов. В системах, поддерживающих только имена файлов 8.3, лишние символы игнорируются. Если имя файла не имеет расширения, его конец .
не имеет значения (то есть myfile
и myfile.
эквивалентен). Кроме того, имена файлов и каталогов в этой системе написаны прописными буквами , хотя системы, использующие стандарт 8.3, обычно нечувствительны к регистру (что CamelCap.tpu
эквивалентно имени CAMELCAP.TPU
). Однако в операционных системах , отличных от 8.3 (таких как практически любая современная операционная система), имеющих доступ к файловым системам 8.3 (включая дискеты в формате DOS , а также некоторые современные карты памяти и сетевые файловые системы), базовая система может внутренне изменять имена файлов на сохраняйте регистр и избегайте сокращения букв в именах, например, в случае VFAT .
VFAT , вариант FAT с расширенным форматом каталогов, был представлен в Windows 95 и Windows NT 3.5. Он позволял использовать длинные имена файлов (LFN) в Юникоде в смешанном регистре в дополнение к классическим именам 8.3 за счет использования нескольких 32-байтовых записей записей каталога для длинных имен файлов (таким образом, что старое системное программное обеспечение 8.3 распознавало только одну как действительную запись каталога).
Чтобы поддерживать обратную совместимость с устаревшими приложениями (в DOS и Windows 3.1 ), в файловых системах FAT и VFAT, операционная система автоматически генерирует имя файла 8.3 для каждого LFN, с помощью которого файл можно [также] открыть, переименовать или удалить. хотя сгенерированное имя (например OVI3KV~N
, ) может быть мало похоже на оригинал. Генерацию имен файлов 8.3 в файловых системах NTFS можно отключить для всей системы (с риском). [2] Имя файла 8.3 можно получить с помощью функции GetShortPathName ядра Kernel32.dll . [3] [4]
Хотя не существует обязательного алгоритма для создания имени 8.3 из LFN, Windows использует следующее соглашение: [5]
TEXTFILE.TXT
TextFile.Txt
становится TEXTFILE.TXT
..
ведущие точки удаляются. Другие символы, например, +
заменяются на подчеркивание _
, а буквы переводятся в верхний регистр. Разделенное имя затем усекается до первых 6 букв его базового имени , за которыми следует тильда , затем одна цифра , затем точка .
, а затем первые 3 символа расширения.TextFile.Mine.txt
становится TEXTFI~1.TXT
(или уже TEXTFI~2.TXT
должен TEXTFI~1.TXT
существовать). ver +1.2.text
становится VER_12~1.TEX
. .bashrc.swp
становитсяBASHRC~1.SWP
.
, за которой следуют первые 3 символа расширения. [6]TextFile.Mine.txt
становится TE021F~1.TXT
.~1
сквозных ~9
суффиксов недостаточно для разрешения коллизии), имя дополнительно усекается до 5. буквы, за которыми следует тильда, затем две цифры, начиная с 10, затем точка .
и первые 3 символа расширения.TextFile.Mine.txt
делается , TEXTF~10.TXT
если все уже существует.TEXTFI~1.TXT
TEXTFI~9.TXT
Во время антимонопольного дела Microsoft в 2001 году названия MICROS~1 и MICROS~2 в шутку использовались для обозначения компаний, которые могли бы существовать после предложенного разделения Microsoft. [7]
NTFS , файловая система, используемая семейством Windows NT , изначально поддерживает LFN, но имена 8.3 по-прежнему доступны для устаревших приложений. При желании это можно отключить в масштабе всей системы, чтобы повысить производительность в ситуациях, когда в одной папке существует большое количество файлов с одинаковыми именами. [2] Создание имен файлов 8.3 можно отключить для всей системы и/или для каждого тома, а существующие имена файлов 8.3 можно удалить с помощью ключа fsutil
реестра или ключа реестра. [8]
Файловая система ISO 9660 (в основном используемая на компакт-дисках ) имеет аналогичные ограничения на самом базовом уровне 1, с дополнительным ограничением, согласно которому имена каталогов не могут содержать расширения и что некоторые символы (особенно дефисы ) не допускаются в именах файлов. Уровень 2 допускает имена файлов длиной до 31 символа, что более совместимо с классическими именами файлов AmigaOS и Mac OS .
В файловых системах VFAT и NTFS имена файлов 8.3 сохраняются в кодировке ANSI для обеспечения обратной совместимости.
ReFS больше не поддерживает имена файлов 8.3 .
Эта устаревшая технология используется в широком спектре продуктов и устройств в качестве стандарта для обмена информацией, например, в компактных флэш-картах, используемых в камерах. Длинные имена файлов VFAT LFN , представленные в Windows 95/98/ME, сохранили совместимость. Но VFAT LFN, используемый в системах на базе NT (Windows NT/2K/XP), использует модифицированное короткое имя 8.3.
Если имя файла содержит только строчные буквы или представляет собой комбинацию нижнего регистра с расширением в верхнем регистре или наоборот; и не имеет специальных символов и соответствует ограничениям 8.3, запись VFAT не создается в Windows NT и более поздних версиях, таких как XP. Вместо этого два бита в байте 0x0c записи каталога используются для указания того, что имя файла следует рассматривать как полностью или частично строчные буквы. В частности, бит 4 означает расширение в нижнем регистре , а бит 3 — базовое имя в нижнем регистре , что позволяет использовать такие комбинации, как example.TXT
или, HELLO.txt
но не Mixed.txt
. Некоторые другие операционные системы поддерживают это. Это создает проблему искажения имен файлов с обратной совместимостью со старыми версиями Windows (95, 98, ME), которые видят имена файлов, состоящие только из заглавных букв, если использовалось это расширение, и, следовательно, могут изменить заглавные буквы файла при его транспортировке, например USB-накопитель. Это может вызвать проблемы в операционных системах, которые не демонстрируют нечувствительность к регистру имен файлов, как это происходит в DOS и Windows. Linux распознает это расширение при чтении; [9] короткое имя опции монтирования определяет, используется ли эта функция при записи. [10]
Для MS-DOS вы можете использовать DOSLFN Хенрика Хафтмана. [11]
Таблица каталогов — это особый тип файла, представляющий каталог. Каждый файл или каталог, хранящийся в нем, представлен в таблице 32-байтовой записью. В каждой записи записываются имя, расширение, атрибуты ( архив , каталог, скрытый, только для чтения, система и том), дата и время создания, адрес первого кластера данных файла/каталога и, наконец, размер файл/каталог.
Допустимые символы для имен файлов DOS включают следующее:
A
-Z
0
–9
""
... ""
), если оно рассматривается как переменная в программе, создающей команду DOS.)!
, #
, $
, %
, &
, '
, (
, )
, -
, @
, ^
, _
, `
, {
, }
,~
Это исключает следующие символы ASCII :
"
, *
, +
, ,
, /
, :
, ;
, <
, =
, >
, ?
, \
, [
, ]
, |
[12].
( U+002E . FULL STOP ) в полях имени и расширения, за исключением записей .
и ..
(см. ниже)a
– z
, сохраняются как A
– Z
в FAT12/FAT16Имена файлов DOS имеют набор символов OEM . Код 0xE5 в качестве первого байта (см. ниже) создает проблемы при использовании дополнительных символов ASCII .
Записи каталога как в корневом регионе каталога, так и в подкаталогах имеют следующий формат:
Иногда может быть желательно преобразовать длинное имя файла в короткое, например, при работе с командной строкой. Чтобы получить правильное имя файла 8.3, можно следовать нескольким простым правилам.
~
в качестве седьмого символа и цифру (обычно 1) в качестве восьмого. Номер отличает его от других файлов с такими же первыми шестью буквами и таким же расширением.Чтобы точно узнать имена SFN или 8.3 файлов в каталоге
использование: dir /x
показывает короткие имена, если они есть, и длинные имена.
или: dir /-n
показывает только короткие имена в исходном формате списка DIR.
В операционных системах на базе Windows NT апплет командной строки ( cmd.exe ) принимает длинные имена файлов с подстановочными знаками (знак вопроса ?
и звездочка *
); длинные имена файлов с пробелами должны быть экранированы (т.е. заключены в одинарные или двойные кавычки). [13]
Начиная с Windows Vista , консольные команды и апплеты PowerShell выполняют ограниченное сопоставление шаблонов , допуская подстановочные знаки в имени файла и каждом подкаталоге в пути к файлу и автоматически заменяя первую соответствующую запись каталога (например, изменяя текущий каталог на ).C:\>CD \prog*\inter*
C:\Program Files\Internet Explorer\