stringtranslate.com

8.3 имя файла

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

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

  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 символа расширения. [5]
    • Пример: 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все уже существуют.

Во время антимонопольного дела 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 включают следующие:

Это исключает следующие символы 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 ) принимает длинные имена файлов с подстановочными знаками (вопросительный знак ?и звездочка *); длинные имена файлов с пробелами в них необходимо экранировать (т. е. заключать в одинарные или двойные кавычки). [12]

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

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

Ссылки

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