Я не спрашиваю об общих синтаксических правилах для имен файлов. Я имею в виду, что вышли из ниоткуда и кусаете вас. Например, пытаясь назвать файл "COM <n> ", в Windows?
Какие зарезервированные имена файлов для разных платформ?
Ответ 1
От: http://www.grouplogic.com/knowledge/index.cfm/fuseaction/view_Info/docID/111.
Следующие символы недопустимы в качестве имен файлов или папок в Windows с использованием NTFS:
/
?
<
>
\
:
*
|
"
и любой символ, который вы можете ввести с помощью клавиши Ctrl.В дополнение к вышеуказанным недопустимым символам символ
^
также не разрешен в операционных системах Windows, использующих файловую систему FAT.В Windows с использованием файловой системы FAT имена файлов и папок могут содержать до 255 символов.
В Windows с использованием файловой системы NTFS имена файлов и папок могут быть длиной до 256 символов.
Под Window длина полного пути в обеих системах составляет 260 символов.
В дополнение к этим символам, следующие соглашения также являются незаконными:
- Размещение пробела в конце имени
- Размещение точки в конце имени
Следующие имена файлов также зарезервированы под Windows:
aux
,com1
,com2
,- ...
com9
,lpt1
,lpt2
,- ...
lpt9
,con
,nul
,prn
Ответ 2
Полное описание законных и нелегальных имен файлов в Windows: http://msdn.microsoft.com/en-us/library/aa365247.aspx
Ответ 3
Как уже говорили другие, имена устройств, такие как COM1, не могут быть именами файлов под Windows, потому что они являются зарезервированными устройствами.
Однако есть метод escape для создания и доступа к файлам с этими зарезервированными именами, например, эта команда перенаправит вывод команды ver
в файл с именем COM1:
ver > "\\?\C:\Users\username\COM1"
Теперь у вас будет файл с именем COM1, который 99% программ не смогут открыть, и, вероятно, зависнет, если вы попытаетесь получить к нему доступ.
Вот статья Microsoft, которая объясняет, как работает это "пространство имен файлов". По сути, это говорит Windows не выполнять какую-либо обработку строки в тексте и передавать ее прямо в файловую систему. Этот прием также можно использовать для работы с путями длиннее 260 символов.
Ответ 4
Неверный Unix, если вы не знаете:
Файлы, которые начинаются с - или - являются законными, но боль в прикладе для работы, так как многие инструменты командной строки считают, что вы предоставляете им варианты.
Многие из этих инструментов имеют специальный маркер "-", чтобы сигнализировать о конце опций:
gzip -9vf -- -mydashedfilename
Ответ 5
У файловой системы boost:: files Руководство по переносимости есть много полезной информации.
Ответ 6
Ну, для MSDOS/Windows, NUL, PRN, LPT < n и CON. Они даже вызывают проблемы при использовании с расширением: "NUL.TXT"
Ответ 7
Если вы не трогаете специальные каталоги, единственными незаконными именами в Linux являются ".
" и "..
". Любое другое имя возможно, хотя доступ к некоторым из них из оболочки требует использования escape-последовательностей.
EDIT: Как сказал Vinko Vrsalovic, файлы, начинающиеся с "-
" и "--
", являются болью из оболочки, поскольку эти последовательности символов интерпретируются приложением, а не оболочкой.