Почему вы не можете использовать специальные символы в имени файла, такие как «?» Или «;»?

17

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

Это почему?

user284989
источник
В какой программе вы пытаетесь сохранить файл и находится ли в файле оскорбительный символ или (как кажется) в имени файла?
Юкка К. Корпела

Ответы:

22

Есть несколько символов, которые имеют особое значение для Windows (и для DOS, откуда изначально взято большинство символов)

из MSDN :

Имя файла не может содержать следующие символы:
\ /: *? "<> |

/это переключатель (а также разделитель каталогов).
\является разделителем каталогов.
:обозначение привода
*и ?подстановочные знаки, используемые при поиске.
"способ разрешить пробелы в параметрах.
<и >перенаправление, которые позволяют вводу и выводу программы поступать и переходить к чему-либо, кроме экрана / клавиатуры.
|это канал, который позволяет использовать выходные данные одной программы в качестве входных данных для следующей.

SeanC
источник
1
Чтобы прояснить этот ответ, эти специальные символы могут помешать синтаксическому анализу командной строки (или пути), если они находятся в имени файла. Не требуется разграничивать имя файла каким-либо образом (например, заключать его в кавычки или пробелы), поэтому встреча с таким специальным символом может привести к неправильному синтаксическому анализу (т. Е. Является ли специальная часть символа в имени файла или оператором?).
опилки
1
Однако можно утверждать, что некоторые из этих ограничений больше не нужны из-за обработки длинных имен файлов и кавычек. \ ? *и "являются единственными, которые действительно необходимы в текущем синтаксисе, поскольку другие символы полезны только за пределами кавычек. Исключением является: который полезен только в качестве второго символа, который может быть объявлен вне закона, разрешив его в другом месте. Другими словами, нет имени файла A:A letter's story.txt, но нет проблемы с именем файлаSarah: My favorite cat.txt
trlkly
<>"зарезервированные символы подстановки. Windows использует их для реализации сложной семантики для DOS *?.при переводе на нативный NT, который имеет простую семантику для *?.. Шесть символов подстановки зарезервированы, потому что Windows реализует сопоставление с подстановочными знаками в самой файловой системе, то есть непосредственно в NtQueryDirectoryFileсистемном вызове, без механизма экранирования. В Unix подстановочные знаки реализуются на уровне приложений, обычно с помощью оболочки, которая поддерживает их экранирование.
Eryk Sun
Обратите внимание, что :обычно это зарезервировано в именах файлов, но не в путях к файлам. Он используется для имен устройств и в качестве разделителя для потоков файлов (например, «имя файла: имя потока: тип потока»). Кроме того , некоторые файловые системы , такие как VirtualBox разделяемой папки файловой системы позволяют :, |и управляющие символы ASCII (1-31) в именах файлов, но они защищены во всех файловых системах Microsoft, для файловой системы с именем трубы , за исключением.
Eryk Sun