8.3 имя файла
Имя файла 8.3 (также называемое коротким именем файла или SFN ) соответствует соглашению об именах файлов, используемому в старых версиях DOS и версиях Microsoft Windows до Windows 95 и Windows NT 3.5. Оно также используется в современных операционных системах Microsoft как альтернативное длинному имени файла для обеспечения совместимости с устаревшими программами. Соглашение об именах файлов ограничено файловой системой FAT. Подобные схемы именования файлов 8.3 также существовали в более ранних операционных системах миникомпьютеров CP/M, TRS-80, Atari и некоторых Data General and Digital Equipment Corporation.
Обзор
[ редактировать ]Имена файлов 8.3 ограничены максимум восемью символами (после любого указателя каталога), за которыми, при необходимости, следует расширение имени файла , состоящее из точки. .
и не более трех дополнительных символов. В системах, поддерживающих только имена файлов 8.3, лишние символы игнорируются. Если имя файла не имеет расширения, в конце .
не имеет значения (т. myfile
и myfile.
эквивалентны). Кроме того, файлов и каталогов имена в этой системе написаны прописными буквами , хотя системы, использующие стандарт 8.3, обычно нечувствительны к регистру (что делает их нечувствительными к регистру). CamelCap.tpu
эквивалент имени CAMELCAP.TPU
). Однако в операционных системах , отличных от 8.3 (таких как практически любая современная операционная система), имеющих доступ к файловым системам 8.3 (включая дискеты в формате DOS , а также некоторые современные карты памяти и сетевые файловые системы), базовая система может внутренне изменять имена файлов на сохраняйте регистр и избегайте сокращения букв в именах, например, в случае VFAT .
VFAT и имена файлов 8.3, созданные компьютером
[ редактировать ]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 можно отключить для всей системы (с риском). [1] Имя файла версии 8.3 можно получить с помощью функции GetShortPathName ядра Kernel32.dll . [2] [3]
Хотя не существует обязательного алгоритма для создания имени 8.3 из LFN, Windows использует следующее соглашение: [4]
- Если LFN записан в верхнем регистре 8.3, LFN вообще не будет храниться на диске.
- Пример:
TEXTFILE.TXT
- Пример:
- Если LFN имеет смешанный регистр 8.3, LFN будет хранить имя в смешанном регистре, а имя 8.3 будет его версией в верхнем регистре.
- Пример:
TextFile.Txt
становитсяTEXTFILE.TXT
.
- Пример:
- Если имя файла содержит символы, недопустимые в имени 8.3 (включая пробелы, которые запрещены соглашением, но не API) или какая-либо часть слишком длинная, имя удаляется из недопустимых символов, таких как пробелы и дополнительные точки. Если имя начинается с точки
.
ведущие периоды удаляются. Другие персонажи, такие как+
заменены на подчеркивание_
, а буквы пишутся заглавными буквами. Вырезанное имя затем усекается до первых 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
- Пример:
- Во всех версиях NT, включая Windows 2000 и более поздние версии, если уже существуют как минимум 4 файла или папки с тем же расширением и первыми 6 символами в их коротких именах, очищенный LFN вместо этого усекается до первых двух букв базового имени (или 1, если базовое имя состоит только из 1 буквы), за которыми следуют 4 шестнадцатеричные цифры, полученные из недокументированного хеша имени файла, за которыми следует тильда, за которой следует одна цифра, за которой следует точка
.
, за которым следуют первые 3 символа расширения. [5]- Пример:
TextFile.Mine.txt
становитсяTE021F~1.TXT
.
- Пример:
- В Windows 95, 98 и ME, если более 9 файлов или папок с одинаковым расширением и первыми 6 символами и их короткими именами (чтобы
~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.
Совместимость
[ редактировать ]Эта устаревшая технология используется в широком спектре продуктов и устройств в качестве стандарта для обмена информацией, например, в компактных флэш-картах, используемых в камерах. 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] опции монтирования короткое имя определяет, используется ли эта функция при записи. [9] Для MS-DOS вы можете использовать DOSLFN Хенрика Хафтмана. [10]
Таблица каталогов
[ редактировать ]Таблица каталогов — это особый тип файла, представляющий каталог. Каждый файл или каталог, хранящийся в нем, представлен в таблице 32-байтовой записью. В каждой записи записываются имя, расширение, атрибуты ( архив , каталог, скрытый, только для чтения, система и том), дата и время создания, адрес первого кластера данных файла/каталога и, наконец, размер файл/каталог.
Допустимые символы для имен файлов DOS включают следующее:
- Прописные буквы
A
–Z
- Числа
0
–9
- Пробел (хотя конечные пробелы в базовом имени или расширении считаются дополнением, а не частью имени файла, также имена файлов с пробелами должны быть заключены в кавычки для использования в командной строке DOS, и если DOS команда создается программно, имя файла должно быть заключено в двойные кавычки (
""
...""
), если рассматривать его как переменную в программе, создающей команду DOS.) !
,#
,$
,%
,&
,'
,(
,)
,-
,@
,^
,_
,`
,{
,}
,~
- Значения 128–255 (хотя, если службы NLS активны в DOS, некоторые символы, интерпретируемые как строчные, недействительны и недоступны)
Это исключает следующие символы ASCII :
"
,*
,+
,,
,/
,:
,;
,<
,=
,>
,?
,\
,[
,]
,|
[11]
В MS-DOS нет escape-символа оболочки..
( U + 002E . ПОЛНАЯ СТОП ) в полях имени и расширения, за исключением.
и..
записи (см. ниже)- Строчные буквы
a
–z
, хранится какA
–Z
на FAT12/FAT16 - Управляющие символы 0–31
- Значение 127 ( УДАЛ ) [ сомнительно – обсудить ]
Имена файлов 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 (используется OS/2 и NT) в FAT12 и FAT16, старшие 2 байта первого номера кластера в FAT32. | |||||||||||||||||||||||||||
0x16 | 2 | Время последнего изменения; описание см. в смещении 0x0e. | |||||||||||||||||||||||||||
0x18 | 2 | Дата последнего изменения; описание см. в смещении 0x10. | |||||||||||||||||||||||||||
0x1a | 2 | Первый кластер в FAT12 и FAT16. Младшие 2 байта первого кластера в FAT32. | |||||||||||||||||||||||||||
0x1c | 4 | Размер файла |
Работа с короткими именами файлов в командной строке
[ редактировать ]Иногда может быть желательно преобразовать длинное имя файла в короткое, например, при работе с командной строкой. Чтобы получить правильное имя файла 8.3, можно следовать нескольким простым правилам.
- Имя файла SFN может содержать не более 8 символов перед точкой. Если его больше, необходимо написать первые 6, затем тильду
~
в качестве седьмого символа и число (обычно 1) в качестве восьмого. Номер отличает его от других файлов с такими же первыми шестью буквами и таким же расширением. - Точки важны и должны использоваться даже для названий папок (если в названии папки есть точка). Если в длинном имени файла/каталога имеется несколько точек, используется только последняя. Предыдущие точки следует игнорировать. Если после последней точки больше трех символов, используются только первые три.
- В целом:
- Любые пробелы в именах файлов следует игнорировать при преобразовании в SFN.
- Игнорировать все периоды, кроме последнего. Не включайте другие точки, как и пробелы. Используйте последнюю точку, если она есть, и последующие символы (до 3). Например, для .manifest будет использоваться только .man.
- Запятые, квадратные скобки, точки с запятой, знаки = и + заменяются символами подчеркивания.
- Случай не важен; Символы верхнего и нижнего регистра обрабатываются одинаково.
Чтобы точно узнать имена 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\
).
См. также
[ редактировать ]- Проектирование файловой системы FAT
- Таблица размещения файлов (FAT)
- Файловая система
- Расширение имени файла
- Длинное имя файла
Ссылки
[ редактировать ]- ^ Перейти обратно: а б «Как отключить создание имени 8.3 на разделах NTFS» . Майкрософт . Проверено 26 февраля 2021 г.
- ^ «Функция GetShortPathName» . MSDN . Архивировано из оригинала 1 октября 2015 г. Проверено 15 сентября 2014 г.
- ^ «Как получить короткое имя файла из длинного имени файла» . Майкрософт . Проверено 26 февраля 2021 г.
- ^ «Как Windows генерирует имена файлов 8.3 из длинных имен файлов» . Майкрософт.
- ^ Гэлвин, Томас (9 июня 2015 г.). «Повесть о двух именах файлов» . Tomgalvin.uk . Архивировано из оригинала 25 августа 2023 г. Проверено 17 октября 2022 г.
- ^ «Однострочный дайджест Microsoft» .
- ^ «Как можно запретить «del *.tmp» удалять файлы *.tmpl в cmd.exe?» . суперпользователь .
- ^ «dir.c\fat\fs — kernel/git/torvalds/linux.git — дерево исходного кода ядра Linux» . git.kernel.org . Проверено 25 июня 2018 г.
- ^ «mount(8): монтировать файловую систему – справочная страница Linux» .
- ^ «ДОСЛФН» .
- ^ Андрис Брауэр (26 декабря 2007 г.). «Вход в каталог» . Файловая система FAT . Проверено 30 июля 2013 г.
- ^ «Использование длинных имен файлов» . 11 сентября 2008 г.