В имени файла под windows нельзя использовать

Информация о материале:
Опубликовано:
Обновлено:

Список запрещённых имён для файлов и каталогов в Windows

Например нельзя создать каталог с именем con и не потому что так в детстве дразнили дядюшку Билла (якобы ботан), а потому, что это имя зарезервировано для сокращённого обозначения консоли — console

В современном с ума сошедшем мире всё перевернулось с ног на голову нетбуки стали называть ноутбуками, каталоги именуют нынче папками (разделы наверно мамками:), вместо Ё пишут Е и пашло поехало :)

Согласно Обзор файловых систем FAT, HPFS и NTFS в системе Windows нельзя обычным образом создать файлы и каталоги с именами:

Только после полного отключения блокировщика скриптов и рекламы на этом месте появится полезная подсказка/ссылка/код/пример конфигурации/etc!

Также в именах для файлов и каталогов нельзя использовать символы:

  • для файловой системы FAT: . » / \ [ ] : ; | = ,
  • для файловой системы NTFS: ? » / \ < > * | :

На самом деле файлы и каталоги с запрещёнными (зарезервированными) именами создать можно, если очень хочется:

Только после полного отключения блокировщика скриптов и рекламы на этом месте появится полезная подсказка/ссылка/код/пример конфигурации/etc!

Но не нужно этого делать по той причине, что могут возникнуть конфликты при работе различных устройств! Например, мы создали каталог с именем LPT1 или COM3, потом хорошо выпили и набрали команду copy file.txt COM3 или copy con LPT1 — внимание, вопрос: куда система должна выполнить копирование, в каталог или в порт COM3/LPT1?:)

Так что невозможность создания, обычным образом, файлов и каталогов с зарезервированными системными (досовскими) именами — это не баг и не страх Билла Гейтса, а баг скорее всего возможность создать такие файлы и каталоги через консоль md "\\.\C:\con"!

Лучше не пытаться свернуть мозги системе, а то гляди может и получиться. Всех с новым годом, желаю всем в новом году счастья, здоровья и всяческих баг, тьфу ты.., т.е. благ!;))

Ссылки по теме:

  • Обзор файловых систем FAT, HPFS и NTFS
  • Ограничения именования в Team Foundation

При работе в операционной системе Windows Vista в аналогичных случаях появляется диалоговое окно Переименование с сообщением «Указано неверное имя устройства».

Запрещенные имена
Если вы попытаетесь создать файлы или папки со следующими именами: con, nul, prn, AUX, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9 (регистр букв — прописные буквы или строчные — значения не имеет), — система в таких случаях вместо введенного вами «запрещенного» имени выведет имя по умолчанию, например, Новая папка, или Текстовый документ, или Документ Microsoft Word. При этом Windows Vista выведет окно Переименование с сообщением «Указано неверное имя устройства».

Дело в том, что по «Соглашению об именованиях» эти символы и имена зарезервированы файловой системой для «внутренних» системных нужд, применять их пользователю запрещено.

Примечание. Применять для файлов и папок имена COM, COM10, COM11…, LPT, LPT10, LPT11… системой не возбраняется.

Имена файлов в FAT
В файловой системе FAT использован традиционный формат имен 8.3, имена файлов должны состоять из символов ASCII. Имя файла или каталога должно состоять не более чем из 8 символов, затем следует разделитель «.» (точка) и расширение длиной до 3 символов. Первым символом имени должна быть буква или цифра. При определении имени можно использовать все символы за исключением перечисленных ниже:
. «/ \ [ ]:; | = ,

Использование этих символов может привести к получению неожиданных результатов. Имя не должно содержать пробелов.

Соглашения именования в NTFS
Имена файлов могут состоять не более чем из 255 символов, включая любое расширение. В именах сохраняется регистр введенных символов, но сами имена не зависят от регистра. NTFS не различает имена в зависимости от регистра. В именах могут быть использованы любые символы за исключением указанных ниже:
? «/ \ ≤> * | :
В настоящее время из командной строки можно задать имя файла длиной не более 253 символов.

Можно ли обойти запреты файловой системы
Можно создать папки с зарезервированными именами с помощью Интерпретатора команд Windows, например:
 — нажмите Пуск → Выполнить… → Запуск программы → cmd → OK;
 — в открывшемся окне Интерпретатора команд после приглашения системы введите mkdir .\com1\ (Enter).

Будет создан каталог с именем com1.
Удалить его обычным путем вы не сможете: появится окно Ошибка при удалении файла или папки с сообщением Не удается удалить com1. Нет доступа. Диск может быть переполнен или защищен от записи, либо файл занят другим приложением или Н е удается удалить com1. Не удается найти файл. Проверьте правильность указания пути и имени файла.
Для удаления каталога com1 нужно ввести команду rmdir .\com1\ (Enter).

Системные папки
Также Windows не позволит переименовать или переместить системные папки, такие как «Documents and Settings» (в Vista — «Пользователи»), «Windows», «System32», «Program Files». Они необходимы для нормальной работы Windows (если каким-либо образом — не в среде Windows — их переименовать/переместить, то вы не сможете загрузить операционную систему).

Пути файловых систем в 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
  • и так далее

Вот что получаешь, когда приходится обеспечивать полную обратную совместимость в течение нескольких десятилетий!

Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку

Допустимые и недопустимые символы в имени файла (Windows, DOS)


Добавил(а) microsin

  

Символы, допустимые в коротких именах файлов, каталогов и расширениях:
буквы, цифры, символы: ~@#$%^-_(){}’`

Символы, недопустимые в коротких именах файлов, каталогов и расширениях:
+=[]:*?;«,./\<>|’пробел’

Символы, недопустимые в длинных именах файлов, каталогов и расширениях:
/\:*?<>|

[Ссылки]

1. ДОПУСТИМЫЕ И НЕДОПУСТИМЫЕ СИМВОЛЫ В ИМЕНИ ФАЙЛА site:inn.h1.ru.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Kmsauto не активирует windows 10 что делать
  • Как восстановить просмотр фотографий windows по умолчанию в windows 10
  • Не работает тачпад на ноутбуке asus windows 10 драйвера
  • Обои на телефон windows phone
  • Неизвестное usb устройство сбой запроса дескриптора конфигурации windows 10 как исправить