Имя файла 8.3 (также называется коротким именем файла или SFN ) - это соглашение о имени файла, используемое старыми версиями DOS и версиями Microsoft Windows до Windows 95 и Windows NT 3.5. Он также используется в современных операционных системах Microsoft в качестве альтернативного имени файла long filename для совместимости с устаревшими программами. Соглашение об именах файлов ограничено файловой системой 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 дискеты, а также некоторые современные карты памяти и сетевой файл systems) базовая система может изменять имена файлов внутри, чтобы сохранить case и избежать усечения букв в именах, например, в случае 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
) может иметь небольшое сходство с оригиналом. В файловых системах NTFS создание имен файлов 8.3 может быть отключено. Имя файла 8.3 можно получить с помощью функции Kernel32.dll GetShortPathName.
Хотя не существует обязательного алгоритма для создания имени 8.3 из LFN, Windows использует следующее соглашение:
TEXTFILE.TXT
TextFile.Txt
становится TEXTFILE.TXT
..
, начальные точки удаляются. Другие символы, такие как +
, заменяются подчеркиванием _
, а буквы вводятся в верхнем регистре. Затем удаленное имя усекается до первых 6 букв его базового имени, за которым следует тильда , за которой следует единственная цифра , за которой следует точка .
, за которым следуют первые 3 символа расширения. TextFile.Mine.txt
становится TEXTFI ~ 1.TXT
(или TEXTFI ~ 2.TXT
, если TEXTFI ~ 1.TXT
уже существует). версия + 1.2. Текст
становится VER_12 ~ 1.TEX
. .bashrc.swp
становится BASHRC ~ 1.SWP
.
, за которой следуют первые 3 символа расширения. TextFile.Mine.txt
становится TE021F ~ 1.TXT
.~ 1
до ~ 9
недостаточно для разрешения конфликта), имя дополнительно усекается до 5 букв, за которым следует ставится тильда, за которой следуют две цифры, начиная с 10, за которой следует точка .
и первые 3 символа расширения. TextFile.Mine.txt
становится TEXTF ~ 10.TXT
, если TEXTFI ~ 1.TXT
- TEXTFI ~ 9.TXT
все уже существуют.NTFS, файловая система, используемая семейством Windows NT, изначально поддерживает LFN, но имена 8.3 по-прежнему доступны для устаревших приложений. При желании это можно отключить для повышения производительности в ситуациях, когда в одной папке существует большое количество файлов с одинаковыми именами.
Файловая система ISO 9660 (в основном используется на компакт-дисках ) имеет аналогичные ограничения на самом базовом уровне 1, с дополнительным ограничением, что имена каталогов не могут содержать расширения и что некоторые символы (особенно дефисы ) не допускаются в именах файлов. Уровень 2 допускает имена файлов длиной до 31 символа, более совместимые с классическими именами файлов AmigaOS и классической Mac OS.
Во время антимонопольного дела Microsoft 2001 года названия MICROS ~ 1 и MICROS ~ 2 в шутку использовались для обозначения компаний, которые могли существовать после предполагаемого разделения Microsoft.
Эта устаревшая технология используется в широком спектре продуктов и устройств в качестве стандарта для обмена информацией, например, компактные флэш-карты, используемые в камерах. 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), которые видят имена файлов с заглавными буквами, если это расширение использовалось, и, следовательно, могут изменять регистр символов в файле, когда он переносится, например, на флешку. Это может вызвать проблемы для операционных систем, которые не проявляют нечувствительность к регистру имен файлов, как это делают DOS и Windows. Текущие (>2.6) версии Linux распознают это расширение при чтении; короткое имя параметра монтирования определяет, используется ли эта функция при записи.
Таблица каталогов - это особый тип файла, который представляет каталог. Каждый файл или каталог, хранящийся в нем, представлен в таблице 32-байтовой записью. Каждая запись записывает имя, расширение, атрибуты (архив, каталог, скрытый, только для чтения, система и том), дату и время создания, адрес первого кластера данных файла / каталога. и, наконец, размер файла / каталога.
Допустимые символы для имен файлов DOS включают следующее:
A
–Z
0
–9
""
... ""
) при просмотре как переменной в программе, создающей команду DOS.)!
, #
, $
, %
,
, '
, (
, )
, -
, @
, ^
, _
, `
, {
, }
, ~
Это исключает следующие символы ASCII :
"
, *
, +
, ,
, /
, :
, ;
, <
, =
, >
, ?
, \
, [
, ]
, |
. Windows / MS-DOS не имеет оболочки escape-символ .
(U + 002E. FULL STOP) в полях имени и расширения, за исключением записей .
и ..
(см. Ниже)a
–z
, сохраненные как A
–Z
в FAT12 / FAT16Имена файлов DOS находятся в кодировке OEM. Код 0xE5 в качестве первого байта (см. Ниже) создает проблемы при использовании дополнительных символов ASCII.
Записи каталога, как в области корневого каталога, так и в подкаталогах, имеют следующий формат:
Смещение байта | Длина | Описание | |||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x00 | 8 | Имя файла DOS (с пробелами) Первый байт может иметь следующие специальные значения:
| |||||||||||||||||||||||||||
0x08 | 3 | Расширение файла DOS (дополнено пробелами, может быть пустым) | |||||||||||||||||||||||||||
0x0b | 1 | Атрибуты файла Первый байт может иметь следующие специальные значения:
Значение атрибута 0x0F используется для обозначения записи с длинным именем файла. | |||||||||||||||||||||||||||
0x0c | 1 | Зарезервировано; два бита используются NT и более поздними версиями для кодирования информации о регистре | |||||||||||||||||||||||||||
0x0d | 1 | Время создания, точное разрешение: 10 мс единиц, значения от 0 до 199. | |||||||||||||||||||||||||||
0x0e | 2 | Создать время. Час, минута и секунда кодируются в соответствии со следующим битовым отображением:
Обратите внимание, что секунды записываются только с точностью 2 секунды разрешение. Более точное разрешение для создания файла находится по смещению 0x0d. | |||||||||||||||||||||||||||
0x10 | 2 | Дата создания. Год, месяц и день кодируются в соответствии со следующим растровым изображением:
| |||||||||||||||||||||||||||
0x12 | 2 | Дата последнего доступа; см. описание смещения 0x10. | |||||||||||||||||||||||||||
0x14 | 2 | EA-Index (используется OS / 2 и NT) в FAT12 и FAT16, старшие 2 байта номера первого кластера в FAT32 | |||||||||||||||||||||||||||
0x16 | 2 | Время последнего изменения; см. описание смещения 0x0e. | |||||||||||||||||||||||||||
0x18 | 2 | Дата последнего изменения; см. описание смещения 0x10. | |||||||||||||||||||||||||||
0x1a | 2 | Первый кластер в FAT12 и FAT16. Младшие 2 байта первого кластера в FAT32. | |||||||||||||||||||||||||||
0x1c | 4 | Размер файла |
Иногда может быть желательно преобразовать длинное имя файла в короткое, например, при работе с командной строкой. Чтобы получить правильное имя файла формата 8.3, можно следовать нескольким простым правилам.
~
в качестве седьмого символа и число (обычно 1) в качестве восьмого. Номер отличает его от других файлов с такими же первыми шестью буквами и таким же расширением.Чтобы точно узнать имена SFN или 8.3 файлов в каталоге
используйте: dir / x
показывает короткие имена, если есть это одно, и длинные имена.
или: dir / -n
показывает только короткие имена в исходном формате списка DIR.
В операционных системах на базе Windows NT апплеты командной строки (cmd.exe ) принимают длинные имена файлов с символами подстановки (знак вопроса ?
и звездочка *
); длинные имена файлов с пробелами должны быть экранированы (т. е. заключены в одинарные или двойные кавычки).
Начиная с Windows Vista, консольные команды и апплеты PowerShell выполняют ограниченное сопоставление с шаблоном, разрешая подстановочные знаки в имени файла и каждом подкаталоге в пути к файлу и без предупреждения подставляя первую совпадающую запись каталога (например, C: \>CD \ prog * \ inter *
изменит текущий каталог на C: \ Program Files \ Internet Explorer \
).