Имя файла 8.3 (также называемое коротким именем файла или SFN ) — это имя, которое подчиняется соглашению об именах файлов, используемому CP/M и старыми версиями 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. Он допускал смешанные по регистру длинные имена файлов Unicode (LFN) в дополнение к классическим именам 8.3, используя несколько 32-байтовых записей записей каталога для длинных имен файлов (таким образом, что старое системное программное обеспечение 8.3 распознавало только одну как допустимую запись каталога).
Для поддержания обратной совместимости с устаревшими приложениями (в DOS и Windows 3.1 ), в файловых системах FAT и VFAT операционная система автоматически генерирует имя файла 8.3 для каждого LFN, с помощью которого файл может [также] быть открыт, переименован или удален, хотя сгенерированное имя (например, OVI3KV~N
) может иметь мало общего с оригиналом. Генерацию имен файлов 8.3 в файловых системах NTFS можно отключить на уровне всей системы (с рисками). [1] Имя файла 8.3 можно получить с помощью функции Kernel32.dll GetShortPathName. [2] [3]
Хотя не существует обязательного алгоритма для создания имени 8.3 из LFN, Windows использует следующее соглашение: [4]
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 символа расширения. [5]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. [6]
NTFS , файловая система, используемая семейством Windows NT , изначально поддерживает LFN, но имена 8.3 по-прежнему доступны для устаревших приложений. Известно, что Windows NTVDM использует имена 8.3. Это можно отключить на уровне всей системы для повышения производительности в ситуациях, когда в одной папке находится большое количество файлов с похожими именами. [1] Создание имен файлов 8.3 можно отключить на уровне всей системы и/или для каждого тома, а существующие имена файлов 8.3 можно удалить с помощью fsutil
или ключа реестра. [7]
Файловая система ISO 9660 (используемая в основном на компакт-дисках ) имеет аналогичные ограничения на самом базовом уровне 1, с дополнительным ограничением, что имена каталогов не могут содержать расширений и что некоторые символы (особенно дефисы ) не допускаются в именах файлов. Уровень 2 допускает имена файлов длиной до 31 символа, что более совместимо с классическими именами файлов AmigaOS и Mac OS .
В файловых системах VFAT и NTFS имена файлов 8.3 хранятся в кодировке ANSI для обеспечения обратной совместимости.
ReFS больше не поддерживает имена файлов 8.3.
Эта устаревшая технология используется в широком спектре продуктов и устройств в качестве стандарта для обмена информацией, например, в картах Compact Flash, используемых в камерах. Длинные имена файлов 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 распознает это расширение при чтении; [8] опция монтирования shortname определяет, будет ли использоваться эта функция при записи. [9]
Для MS-DOS можно использовать DOSLFN Хенрика Хафтмана. [10]
Таблица каталогов — это особый тип файла, представляющий каталог. Каждый файл или каталог, хранящийся в нем, представлен 32-байтовой записью в таблице. Каждая запись записывает имя, расширение, атрибуты ( архив , каталог, скрытый, только для чтения, системный и том), дату и время создания, адрес первого кластера данных файла/каталога и, наконец, размер файла/каталога.
Допустимые символы для имен файлов DOS включают следующие:
A
–Z
0
–9
""
... ""
) при просмотре в качестве переменной в программе, создающей команду DOS.)!
, #
, $
, %
, &
, '
, (
, )
, -
, @
, ^
, _
, `
, {
, }
,~
Это исключает следующие символы ASCII :
"
, *
, +
, ,
, /
, :
, ;
, <
, =
, >
, ?
, \
, [
, ]
, |
[11].
( U+002E . ТОЧКА ) в полях имени и расширения, за исключением записей .
и ..
(см. ниже)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 ) принимает длинные имена файлов с подстановочными знаками (вопросительный знак ?
и звездочка *
); длинные имена файлов с пробелами в них необходимо экранировать (т. е. заключать в одинарные или двойные кавычки). [12]
Начиная с Windows Vista , консольные команды и апплеты PowerShell выполняют ограниченное сопоставление с шаблоном , допуская использование подстановочных знаков в имени файла и каждом подкаталоге в пути к файлу и автоматически заменяя первую соответствующую запись каталога (например, изменит текущий каталог на ).C:\>CD \prog*\inter*
C:\Program Files\Internet Explorer\