stringtranslate.com

8.3 имя файла

Имя файла 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 и имена файлов 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 можно отключить для всей системы (с риском). [2] Имя файла 8.3 можно получить с помощью функции GetShortPathName ядра Kernel32.dll . [3] [4]

Хотя не существует обязательного алгоритма для создания имени 8.3 из LFN, Windows использует следующее соглашение: [5]

  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 вместо этого усекается до первых двух букв базового имени (или 1, если базовое имя состоит только из 1 буквы), за которыми следуют 4 шестнадцатеричные цифры, полученные из недокументированного хеша имени файла, за которыми следует тильда, за которой следует одна цифра, за которой следует точка ., за которой следуют первые 3 символа расширения. [6]
    • Пример: 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.TXTTEXTFI~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 включают следующее:

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

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

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

Работа с короткими именами файлов в командной строке

Иногда может быть желательно преобразовать длинное имя файла в короткое, например, при работе с командной строкой. Чтобы получить правильное имя файла 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 ) принимает длинные имена файлов с подстановочными знаками (знак вопроса ?и звездочка *); длинные имена файлов с пробелами должны быть экранированы (т.е. заключены в одинарные или двойные кавычки). [13]

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

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

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

  1. ^ «Именование файла». Сеть разработчиков Microsoft . Архивировано из оригинала 15 октября 2008 г. Проверено 22 марта 2007 г.
  2. ^ ab «Как отключить создание имени 8.3 на разделах NTFS». Майкрософт . Проверено 26 февраля 2021 г.
  3. ^ "Функция GetShortPathName" . MSDN . Архивировано из оригинала 1 октября 2015 г. Проверено 15 сентября 2014 г.
  4. ^ «Как получить короткое имя файла из длинного имени файла» . Майкрософт . Проверено 26 февраля 2021 г.
  5. ^ «Как Windows генерирует имена файлов 8.3 из длинных имен файлов» . Майкрософт.
  6. ^ Гэлвин, Томас (9 июня 2015 г.). «Повесть о двух именах файлов». Tomgalvin.uk . Архивировано из оригинала 25 августа 2023 г. Проверено 17 октября 2022 г.
  7. ^ "Однострочный дайджест Microsoft" .
  8. ^ «Как можно предотвратить удаление файлов *.tmpl с помощью cmd.exe?». суперпользователь .
  9. ^ "dir.c\fat\fs - kernel/git/torvalds/linux.git - дерево исходного кода ядра Linux" . git.kernel.org . Проверено 25 июня 2018 г.
  10. ^ «mount (8): монтировать файловую систему - справочная страница Linux» .
  11. ^ "ДОСЛФН".
  12. ^ Андрис Брауэр (26 декабря 2007 г.). «Вход в каталог». Файловая система FAT . Проверено 30 июля 2013 г.
  13. ^ «Использование длинных имен файлов». 11 сентября 2008 г.