Допустимые и недопустимые символы в имени файла (Windows, DOS)
Добавил(а) microsin
Символы, допустимые в коротких именах файлов, каталогов и расширениях:
буквы, цифры, символы: ~@#$%^-_(){}’`
Символы, недопустимые в коротких именах файлов, каталогов и расширениях:
+=[]:*?;«,./\<>|’пробел’
Символы, недопустимые в длинных именах файлов, каталогов и расширениях:
/\:*?<>|
[Ссылки]
1. ДОПУСТИМЫЕ И НЕДОПУСТИМЫЕ СИМВОЛЫ В ИМЕНИ ФАЙЛА site:inn.h1.ru.
Все файловые системы, поддерживаемые Windows, используют концепцию файлов и каталогов для доступа к данным, хранящимся на диске или устройстве. Разработчики Windows, работающие с API-интерфейсами Windows для ввода-вывода файлов и устройств, должны понимать различные правила, соглашения и ограничения имен файлов и каталогов.
Доступ к данным можно получить с дисков, устройств и общих сетевых ресурсов с помощью интерфейсов API файлового ввода-вывода. Файлы и каталоги, наряду с пространствами имен, являются частью концепции пути, который представляет собой строковое представление того, где получить данные, независимо от того, на диске они, или устройстве, или сетевом ресурсе.
Имена файлов и каталогов
Все файловые системы придерживаются одних и тех же общих соглашений об именовании для отдельного файла: имя базового файла и необязательное расширение, разделяемые точкой. Однако, у каждой файловой системы, ()NTFS, и cdfs, NTFS или exFAT, FAT и FAT32, могут быть особые и иные правила о формировании отдельных компонентов пути к каталогу или файлу.
Обратите внимание, что каталог — это просто файл со специальным атрибутом, обозначающим его как каталог, но он также должен следовать всем тем же правилам именования, что и обычный файл. Поскольку термин «каталог» просто относится к определенному типу файлов в отношении файловой системы, мы будем использовать общий термин «файл» для охвата понятий каталогов и файлов данных как таковых. Из-за этого, если не указано иное, любые правила именования или использования или примеры для файла также должны применяться к каталогу. Термин путь относится к одному или нескольким каталогам, обратным косым чертам и, возможно, имени тома.
Ограничения количества символов также могут различаться и варьироваться в зависимости от используемой файловой системы и формата префикса имени пути. Это еще больше осложняется поддержкой механизмов обратной совместимости. Например, старая файловая система MS-DOS FAT поддерживает не более 8 символов для имени базового файла и 3 символа для расширения, в общей сложности 12 символов, включая разделитель точку. Файловые системы Windows FAT и NTFS не ограничиваются этим, поскольку они имеют поддержку длинных имен файлов, но они по-прежнему поддерживают предыдущие версии имен файлов.
Правила именования файлов
Следующие основные правила позволяют приложениям создавать и обрабатывать допустимые имена файлов и каталогов независимо от файловой системы:
- Используйте точку, чтобы отделить имя базового файла от расширения в имени каталога или файла.
- Используйте обратную косую черту (\) для разделения компонентов пути. Обратная косая черта отделяет имя файла от пути к нему, и одно имя каталога от другого имени каталога в пути. Нельзя использовать обратную косую черту в имени файла или каталога, потому что это зарезервированный символ, который разделяет имена на составляющие.
- Не думайте о чувствительности к регистру. Например, можно считать имена OSCAR, Oscar и oscar одинаковыми, хотя некоторые файловые системы (например, файловая система, совместимая с POSIX) могут рассматривать их как разные. Обратите внимание, что NTFS поддерживает семантику POSIX для учета регистра, но это не поведение по умолчанию.
- Обозначения томов (буквы дисков) не учитывают регистр символов. Например,» D:\ «и» d:\ » – это одно и то же.
- Используйте любой символ на текущей кодовой странице для имени, включая символы Юникода и символы в расширенном наборе символов (128-255), за исключением следующих:
- Следующие зарезервированные символы:
- < (меньше)
- > (больше)
- : (двоеточие)
- » (двойная кавычка)
- / (косая черта)
- \ (обратная косая черта)
- | (вертикальный стержень или символ трубы)
- ? (вопросительный знак)
- * (звездочка)
- Целое нулевое значение, иногда называемое символом ASCII NUL.
- Символы, целочисленные представления которых находятся в диапазоне от 1 до 31, за исключением альтернативных потоков данных, где эти символы разрешены.
- Любой другой символ, который целевая файловая система не разрешает использовать.
- Следующие зарезервированные символы:
- Используйте точку как компонент каталога в пути для представления текущего каталога, например».\temt.txt.».
- Используйте две последовательных точки (..) как компонент каталога в пути для представления родительского каталога текущего каталога, например»..\temp.txt.»
- Не используйте следующие зарезервированные имена для имени файла: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, и LPT. Также избегайте этих имен, за которыми следует расширение; например, NUL.txt не рекомендуется.
- Не завершайте имя файла или каталога пробелом или точкой. Хотя файловая система может поддерживать такие названия, оболочка и пользовательский интерфейс Windows не будут работать с этим. Однако допустимо указывать точку в качестве первого символа имени. Например, «.temp».
Короткие и длинные имена
Длинным именем файла считается любое имя файла, которое превышает соглашение об именовании стиля MS-DOS (также называемое схема 8.3). При создании длинного имени файла Windows может также создать короткую форму имени 8.3, называемую псевдонимом 8.3 или коротким именем, и сохранить ее на диске. Это 8.3 псевдонимы могут быть отключены по соображениям производительности либо по всей системе, либо для указанного тома, в зависимости от конкретной файловой системы.
Во многих файловых системах имя файла будет содержать тильду ( ~ ) в каждом компоненте имени, которое слишком длинное, чтобы соответствовать правилам именования 8.3.
Не все файловые системы могут следовать соглашение о подстановке тильды, и системы могут быть настроены на отключение 8.3 генерации псевдонимов, даже если они обычно поддерживают его. Поэтому не следует делать предположение, что псевдоним 8.3 уже существует на диске.
По запросу 8.3 имена файлов, длинные имена файла или полный путь к файлу из системы, рассмотрите следующие варианты:
- Чтобы получить 8.3 форму длинного имени файла, используйте функцию GetShortPathName.
- Чтобы получить версию короткого имени длинного файла, используйте функцию GetLongPathName.
- Чтобы получить полный путь к файлу, используйте функцию GetFullPathName.
В новых файловых системах, таких как NTFS, exFAT, UDFS и FAT32, Windows сохраняет длинные имена файлов на диске в Юникоде, что означает, что исходное длинное имя файла всегда сохраняется. Это верно, даже если длинное имя файла содержит расширенные символы, независимо от кодовой страницы, которая активна во время операции чтения или записи диска.
Файлы, использующие длинные имена файлов, могут быть скопированы между разделами файловой системы NTFS и разделами файловой системы Windows FAT без потери информации об имени файла. Это может быть неверно для старых MS-DOS FAT и некоторых типов cdfs (CD-ROM) файловых систем, в зависимости от фактического имени файла. В данном случае, если это возможно, подставляется короткое имя файла.
Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Какие можно использовать символы в имени файла? В именах файлов рекомендуется использовать русские и латинские буквы, цифры, пробелы и знаки препинания.
Однако имя файла не следует начинать с точки, а также использовать в имени квадратные [ ] или фигурные { } скобки. Недопустимыми для имен файлов являются следующие служебные символы / \ | : * ? “ < >
Существует ли максимальная длина имени файла? Длина имени файла не должна превышать 255 символов. На самом деле, обычно хватает 20-25 символов.
Операционная система Windows не делает различий между строчными и прописными буквами для имен файлов. Это означает, что не получится хранить в одной и той же папке файлы, имена которых различаются только регистром. Например, два имени файла «Название.doc» и «НАЗВАНИЕ.doc» для Windows будет одним именем для одного и того же файла.
Что такое тип файла или формат файла
Как Вы считаете, могут ли быть в одной папке несколько файлов с одинаковым именем PRIMER? Это возможно при условии, что у имени PRIMER будут разные расширения.
Расширение имени файла указывает на его тип (иногда еще говорят — формат файла). Таким образом,
• «тип файла»,
• «формат файла»,
• «расширение файла»,
• «расширение имени файла»
— все эти понятия, по сути, одно и то же.
Например,
PRIMER.doc(x) – типом файла является документ Word (или файл в формате Ворда),
PRIMER.bmp – типом файла является рисунок,
PRIMER.avi – типом файла является видеофайл,
PRIMER.wav – типом файла является аудиофайл.
Все эти файлы имеют разные имена (за счет разных расширений имени файла) и могут храниться в одном и том же месте, т.е. в одной папке.
Если проводить аналогию с именами людей, то имя файла совпадает с именем человека, а расширение имени файла – с фамилией человека. Соответственно, PRIMER.doc и PRIMER.bmp по этой аналогии то же самое, что Иван Петров и Иван Сидоров.
Файлы с именами PRIMER.doc и VARIANT.docx – это два брата из одного семейства документов (с одинаковым расширением .docx). Аналогично, например, Иван Петров и Федор Петров – братья из одной семьи Петровых.
Тип файла (то есть, расширение имени файла) – это часть имени файла, которая начинается с точки, после которой стоят несколько символов.
Распространены типы (расширения), состоящие из трех букв – .doc, .txt, .bmp, .gif и.т.д. Регистр не имеет значения, поэтому .doc и .DOC – это одно и то же расширение документа, один тип файла.
Расширение является необязательным атрибутом в имени файла, то есть его может и не быть. В таком случае в конце имени файла точка, как правило, не ставится.
Зачем нужен тип файла
Расширение в имени файла хоть и не обязательно, но все-таки желательно, так как оно указывает операционной системе Windows на тип файла. Проще говоря, тип файла является подсказкой для Windows, с помощью какой программы системе Windows следует этот файл открывать.
Например, расширение .docx указывает, что файл следует открывать с помощью редактора Word, а расширение .cdr – на то, что файл открывается графической программой Corel Draw.
Есть зарезервированные (служебные) имена, которые нельзя использовать в качестве имен файлов, так как они являются именами устройств:
PRN – принтер,
COM1-COM4 – устройства, присоединяемые к последовательным портам 1-4,
AUX – то же, что COM1,
LPT1-LPT4 – устройства, присоединяемые к параллельным портам 1-4 (как правило, принтеры),
CON (consol) – при вводе – клавиатура, при выводе – экран,
NUL – «пустое» устройство.
Запрещенные символы в именах файлов
Приведу примеры имен файлов, которые являются недопустимыми:
5<>8/7.txt – символы «<», «>» и «/» запрещены,
В чем вопрос? – символ «?» запрещен,
PRN.bmp – здесь PRN зарезервированное имя.
Что такое значок файла или иконка файла
В зависимости от типа файла на экран Windows выводятся различные значки (иконки). Первый пример касается значка текстового редактора:
— значок документа, обрабатываемого редактором Word, и имеющего расширение .doc.
Второй пример относится к архивному файлу.
Это тот файл, который был обработан с помощью программы-архиватора WinRAR (сокращенно RAR):
— значок сжатых (архивных) файлов, обрабатываемых архиватором RAR, и имеющих расширение .rar.
Почему я не вижу типы файлов в своем
Проводнике?
Проводник Windows (Пуск—Программы—Стандартные—Проводник) по умолчанию имеет
режим, когда расширения имен (типы) файлов на экран не выводятся, но при этом
выводятся значки (иконки) файлов.
Подробнее о том, как «заставить» Windows показывать типы файлов: Изменение имени файла в Windows
Выбор типа файла при сохранении файла
При сохранении файла достаточно написать его имя и выбрать тип файла из имеющегося списка. Выбранное расширение автоматически добавится к имени файла. Например, на рисунке ниже к имени файла программа сама добавит расширение .jpg. В результате Windows запомнит этот файл с именем «рисунок в paint.jpg».
Во избежание недоразумений при сохранении файлов всегда обращайте внимание
на строку «тип файла», если она есть. Ведь тип файла является для Windows
подсказкой, с помощью которого система определяет, какой именно программой этот
файл можно открыть.
Тесная связь между типом файла и программой, открывающей такой тип
Если Вы скачали из Интернета файл, например, с расширением .rar, но на
вашем компьютере не установлена программа-архиватор для работы с такими
«сжатыми, заархивированными» файлами, то не удивляйтесь, что файл не
открывается. Другими словами, надо отдавать себе отчет, что если открывать
файлы, например, в видео-формате, то на компьютере должна быть в наличии
соответствующая программа для работы с таким форматом.
Можно провести аналогию между файлом (точнее, между типом файла) и
программой, работающей с таким типом файлов. Файл – замок, а программа,
открывающая этот файл, – ключик к замочку. Как известно, замок без
ключика не открывается, да и ключик без замка особой ценности не представляет.
Упражнения по компьютерной грамотности:
1) Попробуйте на Рабочем столе
создать две папки с именами: PRIMER и primer.
Для этого на Рабочем столе кликните правой кнопкой мыши на свободном месте,
а в появившемся окне – по опции «Создать» и, наконец, клик по опции
«Папку». Вместо слов «Новая папка» введите «PRIMER». Затем все это повторяете
для создания второй папки с именем «primer». Windows дал Вам «добро» на
открытие второй папки?
2) Зайдите, например, в редактор Word
и попробуйте сохранить документ с именем PRN. Windows разрешил такое имя для
нового файла?
3) Как решить проблему: «С инета
скачиваю файлы, а они в формате .rar и на компе не открываются, не
читаются. Что делать?»
Допустимые символы в имени файла
2021-10-17
·
1 мин. для прочтения
Допустимые символы в имени файла.
Содержание
1 Общая информация
- Для Windows базируемся на документе https://docs.microsoft.com/ru-ru/windows/win32/fileio/naming-a-file.
2 Запрещённые печатные символы ASCII
2.1 Linux/Unix
/
(forward slash)
2.2 Windows
<
(less than)>
(greater than):
(colon), в NTFS имеет семантику альтернативных потоков данных (Alternate Data Streams)"
(double quote)/
(forward slash)\
(backslash)|
(vertical bar or pipe)?
(question mark)*
(asterisk)
3 Непечатаемые символы
3.1 Linux/Unix
0
илиNUL
(NULL byte)
3.2 Windows
0
–31
(ASCII control characters)
4 Зарезервированные имена файлов
4.1 Windows
CON
PRN
AUX
NUL
COM1
COM2
COM3
COM4
COM5
COM6
COM7
COM8
COM9
LPT1
LPT2
LPT3
LPT4
LPT5
LPT6
LPT7
LPT8
LPT9
5 Другие ограничения
5.1 Windows
- Имена файлов не могут заканчиваться пробелом или точкой.
5.2 macOS
- Двоеточие
:
и косая черта/
запрещены в зависимости от контекста. - Двоеточие
:
используется в качестве разделителя в путях HFS, а косая черта/
используется в качестве разделителя в путях POSIX.
Пути файловых систем в Windows страннее, чем можно подумать. В любой производной от Unix системе пути на удивление просты: если нечто начинается с /
, то это путь. Но всё совершенно иначе в Windows, которая имеет озадачивающее разнообразие схем составления пути.
Когда я реализовал функцию автозавершения пути в Fileside 1.7, мне нужно было изучить этот вопрос внимательнее, чтобы ничего не упустить. В этой статье я расскажу о своих находках.
Стоит заметить, что статья ограничивается только тем типом путей, который видит пользователь приложений Windows (обусловленный Win32 API). Под этим слоем есть ещё больше любопытного, в основном касающегося тех, кто пишет драйверы оборудования и тому подобное.
Вкратце
Форматы абсолютных путей
Форматы относительных путей
Запрещённые символы
Ограничения длины
Схемы путей Windows
В Windows существует три разных вида абсолютного пути и три разных типа относительного пути.
Абсолютные пути
Абсолютные, или полные пути — это завершённые пути, сами по себе уникальным образом идентифицирующие местоположение в файловой системе.
Пути к диску
Пути к диску — это старые добрые пути, которые мы знаем и любим, они состоят из буквы диска и последовательности папок.
D:\Doughnut preferences\With jam in
UNC-пути
UNC расшифровывается как Universal Naming Convention, это описание файлов, начинающееся с \\
, часто используемое для ссылок на сетевые накопители. Первый сегмент после \\
— это хост, который может быть или сервером с именем, или IP-адресом:
\\Work\Hard
\\192.168.1.15\Hard
UNC-пути также можно использовать для доступа к локальным дискам:
\\localhost\C$\Users\Andrew Fletcher
\\127.0.0.1\C$\Users\Alan Wilder
Или с использованием имени компьютера:
\\Pipeline\C$\Users\Martin Gore
Символ $
в C$
обозначает скрытую административную общую папку; он не заменяет двоеточие рядом с именем диска :
. Общие диски в стиле C$
— это просто удобные ярлыки, автоматически создаваемые Windows. Доступ к дискам через них возможен, только если вы вошли как администратор.
Стоит также заметить, что \\Pipeline
сам по себе не валидный путь к папке, он идентифицирует только сервер. Чтобы попасть в папку, нужно добавить имя общей папки.
Пути к устройству
Путь к устройству начинается с одного из следующих фрагментов:
\\?\
\\.\
Кроме файлов и папок их можно использовать для адресации физических устройств (дисков, дисплеев, принтеров и так далее). Не совсем то, что вы используете в повседневном процессе управления файлами, но это полезно знать, если вы когда-нибудь найдёте что-то подобное.
Синтаксис доступа к локальной папке выглядит как один из этих вариантов:
\\?\Z:\Animals\Cute
\\.\Z:\Animals\Cunning
Если вам нужно ещё больше загадочности, то можно также подставить эквивалентный Z:
идентификатор устройства:
\\?\Volume{59e01a55-88c5-411f-bf0b-92820bdb2548}\Animals\Cryptic
Здесь Volume{59e01a55-88c5-411e-bf0a-92820bdb2549}
— это идентификатор дискового тома, на котором находится Z:
в компьютере.
Также существует специальный синтаксис для описания UNC-путей как путей к устройству:
\\?\UNC\localhost\Z$\Animals\Curious
В путях к устройству часть, идущая после \\?\
или \\.\
— это имя, определённое во внутреннем пространстве имён Object Manager Windows. Те, кому любопытно исследовать это пространство имён, могут скачать инструмент WinObj и посмотреть.
Нормализованные и литеральные пути к устройству
Так в чём же разница между \\?\
и \\.\
?
В обычном случае, когда вы передаёте путь операционной системе Windows, она очищает его, прежде чем использовать. Этот процесс называется нормализацией, подробнее о нём мы поговорим ниже.
Путь \\?\
пропускает этот этап очистки, а \\.\
не пропускает. Поэтому можно назвать пути \\?\
литеральными путями к устройству, а \\.\
— нормализованными путями к устройству.
Допустим, по какой-то непонятной причине, у вас есть файл с именем ..
(например, он мог быть создан на сетевом диске в другой системе). В обычном случае вы бы не смогли получить доступ к нему, потому что нормализация резолвит его в родительскую папку, но благодаря литеральному пути к устройству это можно сделать.
Относительные пути
Относительные пути — это неполные пути, которые для уникальной идентификации местоположения необходимо скомбинировать с другим путём.
Пути, относительные к текущей папке
Эти пути используют в качестве начальной точки текущую папку, например, .\Torquay
относится к подпапке текущей папки, а ..\Wales
относится к подпапке родителя текущей папки.
Папки, относительные к корню текущего диска
Если начать путь с одной \
, то путь интерпретируется как относительный к корню текущего диска. Поэтому если вы находитесь в любом месте диска E:
и введёте \Africa
, то окажетесь в E:\Africa
.
Когда доступ к текущей папке выполняется через UNC-путь, то путь, относительный к текущему диску, интерпретируется относительно к общей корневой папке, допустим \\Earth\Asia
.
Пути, относительные к текущей папке диска
Эти более редко используемые пути указывают диск без обратной косой черты, например E:Kreuzberg
, и интерпретируются относительно к текущей папке этого накопителя. На самом деле это имеет смысл только в контексте оболочки командной строки, отслеживающей текущую рабочую папку для каждого диска.
Это единственный тип путей, не поддерживаемый Fileside, потому что в нём нет понятия текущей папки каждого диска. Текущую папку имеют только панели.
Нормализация
Как говорилось ранее, все пути, за исключением литеральных путей к устройству, перед использованием проходят процесс нормализации. Этот процесс состоит из следующих этапов:
- Замена косых черт (
/
) на обратные косые черты (\
) - Сворачивание повторяющихся разделителей в виде обратных косых черт в один
- Резолвинг относительных путей заменой всех
.
или..
- Отсечение завершающих пробелов и точек
Таким образом, в общем случае можно указывать пути Windows при помощи косых черт.
Правила именования в Windows
Теперь рассмотрим отдельные элементы, из которых состоит путь. Существует множество ограничений имён, которые можно использовать для файлов и папок.
Запрещённые символы
В имени нельзя использовать следующие символы:
< > " / \ | ? *
Также исключаются любые непечатаемые символы со значением ASCII меньше 32.
Хитрое двоеточие
В большинстве случаев :
также запрещено.
Однако существует экзотическое исключение в виде изменённых потоков данных NTFS, в которых двоеточие используется в качестве разделителя внутри имени. Малоизвестно, что в некоторых контекстах можно хранить внутри файла скрытый фрагмент данных, добавляя к его имени суффикс, которому предшествует двоеточие.
Опасная точка
Символ .
допустим внутри или в начале имени, но запрещён в конце.
Начинающие и завершающие пробелы
Любопытно, что Windows допускает пробелы в начале, но не в конце имён. Так как имя с пробелами в начале и конце часто выглядит похожим на имя без пробелов, обычно это ужасная идея, и при переименовании или создании файлов Fileside автоматически удаляет их.
Запрещённые имена
По историческим причинам нельзя использовать следующие имена:
CON
, PRN
, AUX
, NUL
, COM0
, COM1
, COM2
, COM3
, COM4
, COM5
, COM6
, COM7
, COM8
, COM9
, LPT0
, LPT1
, LPT2
, LPT3
, LPT4
, LPT5
, LPT6
, LPT7
, LPT8
и LPT9
.
Это включает и имена с расширениями. Например, если вы назовёте файл COM1.txt
, то внутри он преобразуется в \\.\COM1\
и интерпретируется самой Windows как устройство. А это не то, что нам нужно.
Чувствительность к регистру
В большинстве случаев Windows не делает различий между символами в верхнем и нижнем регистре в путях.
C:\Polish hamlet
, c:\polish Hamlet
, C:\Polish Hamlet
и C:\POliSh hAMlET
считаются абсолютно одинаковыми.
Однако с обновления Windows 10 за апрель 2018 года файловые системы NTFS имеют опцию включения чувствительности к регистру на уровне папок.
Ограничения длины
Мы ещё не закончили: ограничения есть и на длину.
Пути
Традиционно длина пути в Windows не могла превышать 260 символов. Даже сегодня это справедливо для некоторых приложений, если только их разработчики не предприняли мер для обхода этого ограничения.
Этот обход заключается в преобразовании каждого пути в литеральный путь к устройству перед передачей его Windows. Сделав это, мы сможем обойти ограничение в 260 символов и увеличить его до чуть более щедрого предела в 32767 символов.
Имена
Имена файлов и папок не могут быть длиннее 255 символов.
Так много способов сказать одно и то же
Вооружённые этим знанием, мы понимаем, что можем создать почти неограниченное количество различных строк путей, и все они будут ссылаться на одну и ту же папку.
C:\CHAMELEON
c:\chameleon
C:\/\\//\\\///Chameleon
C:\Windows\..\Users\..\Chameleon
\\localhost\C$\Chameleon
\\127.0.0.1\C$\Chameleon
\\?\C:\Chameleon
\\.\C:\Chameleon
\\.\UNC\localhost\C$\Chameleon
\\?\Volume{59e01a55-88c5-411e-bf0a-92820bdb2549}\Chameleon
\\.\GLOBALROOT\Device\HarddiskVolume4\Chameleon
- и так далее
Вот что получаешь, когда приходится обеспечивать полную обратную совместимость в течение нескольких десятилетий!
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку