8.3 имя файла - 8.3 filename

8,3 файла (также называется короткое имя файла или 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 и компьютерные имена файлов формата 8.3

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 использует следующее соглашение:

  1. Если LFN в верхнем регистре 8,3, LFN вообще не будет храниться на диске.
    • Пример: TEXTFILE.TXT
  2. Если LFN имеет смешанный регистр 8.3, LFN будет хранить имя в смешанном регистре, а имя 8.3 будет его версией в верхнем регистре.
    • Пример: TextFile.Txt становится TEXTFILE.TXT .
  3. Если имя файла содержит символы, недопустимые в имени 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
  4. Во всех версиях NT, включая Windows 2000 и более поздние версии , если уже существует по крайней мере 4 файла или папки с таким же расширением и первыми 6 символами в их коротких именах, вырезанный LFN вместо этого усекается до первых 2 букв базового имени (или 1, если базовое имя состоит только из 1 буквы), за которыми следуют 4 шестнадцатеричные цифры, полученные из недокументированного хэша имени файла, за которым следует тильда, за которой следует одна цифра, за которой следует точка . , за которой следуют первые 3 символа расширения.
    • Пример: TextFile.Mine.txt становится TE021F~1.TXT .
  5. В Windows 95, 98 и ME, если более 9 файлов или папок с одинаковым расширением и первыми 6 символами и в их коротких именах (так что ~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), которые видят имена файлов с заглавными буквами, если это расширение использовалось, и, следовательно, могут изменять регистр символов в файле при его транспортировке, например, на USB-накопитель. Это может вызвать проблемы для операционных систем, которые не демонстрируют нечувствительность к регистру имен файлов, как это делают DOS и Windows. Текущие (> 2.6) версии Linux распознают это расширение при чтении; короткое имя параметра монтирования определяет, используется ли эта функция при записи. Для MS-DOS вы можете использовать DOSLFN Хенрика Хафтманна.

Таблица каталогов

Таблица каталогов - это особый тип файла, который представляет каталог. Каждый файл или каталог, хранящийся в нем, представлен в таблице 32-байтовой записью. Каждая запись записывает имя, расширение, атрибуты ( архив , каталог, скрытый, доступный только для чтения, система и том), дату и время создания, адрес первого кластера данных файла / каталога и, наконец, размер файл / каталог.

Допустимые символы для имен файлов DOS включают следующее:

  • Заглавные буквы A - Z
  • Цифры 0 - 9
  • Пробел (хотя конечные пробелы в базовом имени или расширении считаются заполнением, а не частью имени файла, также имена файлов с пробелами в них должны быть заключены в кавычки, чтобы использоваться в командной строке DOS, и если DOS команда построена программно, имя файла должно быть заключено в двойные двойные кавычки ( "" ... "" ), если рассматривается как переменная в программе, создающей команду DOS.)
  • ! , # , $ , % , & , ' , ( , ) , - , @ , ^ , _ , ` , { , } , ~
  • Значения 128–255 (хотя, если в DOS активны службы NLS , некоторые символы, интерпретируемые как строчные, недействительны и недоступны)

Это исключает следующие символы ASCII :

  • " , * , + , , , / , : , ; , < , = , > , ? , \ , [ , ] , |
    Windows / MS-DOS не имеет оболочки экранирующего символа
  • . ( U + 002E . ПОЛНЫЙ ОСТАНОВ ) в имя и расширение полей, за исключением . и .. записи (см ниже)
  • Строчные буквы a - z , хранящиеся как A - Z в FAT12 / FAT16
  • Управляющие символы 0–31
  • Значение 127 ( DEL )

Имена файлов DOS находятся в наборе символов OEM . Код 0xE5 в качестве первого байта (см. Ниже) создает проблемы при использовании дополнительных символов ASCII .

Записи каталога, как в области корневого каталога, так и в подкаталогах, имеют следующий формат:

Смещение байта Длина Описание
0x00 8 Имя файла DOS (с пробелами)

Первый байт может иметь следующие специальные значения:

0x00 Запись доступна, и никакая последующая запись не используется
0x05 Начальный символ на самом деле 0xE5
0x2E Ввод точки : либо, . либо ..
0xE5 Запись ранее была удалена. Утилиты восстановления файлов должны заменять этот символ обычным символом как часть процесса восстановления.
0x08 3 Расширение файла DOS (заполнено пробелами, может быть пустым)
0x0b 1 Атрибуты файла

Первый байт может иметь следующие специальные значения:

Немного Маска Описание
0 0x01 Только чтение
1 0x02 Скрытый
2 0x04 Система
3 0x08 Метка тома
4 0x10 Подкаталог
5 0x20 Архив
6 0x40 Устройство (только для внутреннего использования, на диске не обнаружено)
7 0x80 Неиспользованный

Значение атрибута 0x0F используется для обозначения записи с длинным именем файла.

0x0c 1 Зарезервированный; два бита используются NT и более поздними версиями для кодирования информации о регистре
0x0d 1 Время создания, точное разрешение: единицы 10  мс , значения от 0 до 199.
0x0e 2 Создавайте время. Час, минута и секунда кодируются в соответствии со следующим растровым изображением:
Биты Описание
15–11 Часы (0–23)
10–5 Минуты (0–59)
4–0 Секунды / 2 (0–29)

Обратите внимание, что секунды записываются только с разрешением 2  секунды . Более точное разрешение для создания файла находится по смещению 0x0d.

0x10 2 Дата создания. Год, месяц и день кодируются согласно следующему растровому изображению:
Биты Описание
15–9 Год (0 = 1980, 127 = 2107)
8–5 Месяц (1 = январь, 12 = декабрь)
4–0 День (1–31)
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 символов перед точкой. Если их больше, необходимо написать первые 6, затем тильду ~ в качестве седьмого символа и число (обычно 1) в качестве восьмого. Номер отличает его от других файлов с такими же первыми шестью буквами и таким же расширением.
  2. Точки важны и должны использоваться даже для имен папок (если в имени папки есть точка). Если в длинном имени файла / каталога есть несколько точек, используется только последняя из них. Предыдущие точки следует игнорировать. Если после последней точки больше трех символов, используются только первые три.
  3. В целом:
    • Любые пробелы в именах файлов следует игнорировать при преобразовании в SFN.
    • Игнорируйте все точки, кроме последней. Не включайте никакие другие точки, как и пробелы. Используйте последнюю точку, если есть, и следующие символы (до 3). Например, для .manifest будет использоваться только .man.
    • Запятые, квадратные скобки, точки с запятой, знаки = и + заменяются подчеркиванием.
    • Регистр не важен, символы верхнего и нижнего регистра обрабатываются одинаково.

Чтобы точно узнать имена SFN или 8.3 файлов в каталоге

использование: dir /x показывает короткие имена, если они есть, и длинные имена.

или: dir /-n показывает только короткие имена в исходном формате списка DIR.

В операционных системах на базе Windows NT апплеты командной строки ( cmd.exe ) принимают длинные имена файлов с подстановочными знаками (вопросительный знак ? и звездочка * ); длинные имена файлов с пробелами должны быть экранированы (т.е. заключены в одинарные или двойные кавычки).

Начиная с Windows Vista , консольные команды и апплеты PowerShell выполняют ограниченное сопоставление с образцом , разрешая использование подстановочных знаков в имени файла и каждом подкаталоге в пути к файлу и автоматически подставляя первую соответствующую запись каталога (например, изменит текущий каталог на ). C:\>CD \prog*\inter*C:\Program Files\Internet Explorer\

Смотрите также

Рекомендации