Какие зарезервированные имена файлов для различных платформ? - PullRequest
13 голосов
/ 23 сентября 2008

Я не спрашиваю об общих синтаксических правилах для имен файлов. Я имею в виду ошибки, которые выпрыгивают из ниоткуда и кусают тебя. Например, пытаться назвать файл «COM » в Windows?

Ответы [ 7 ]

14 голосов
/ 23 сентября 2008

От: 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
8 голосов
/ 23 сентября 2008

Полное описание легальных и нелегальных имен файлов в Windows: http://msdn.microsoft.com/en-us/library/aa365247.aspx

6 голосов
/ 13 января 2015

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

Однако существует метод escape для создания и доступа к файлам с этими зарезервированными именами, например, эта команда перенаправит вывод команды ver в файл с именем COM1:

ver > "\\?\C:\Users\username\COM1"

Теперь у вас будет файл с именем COM1, который 99% программ не смогут открыть, и, вероятно, зависнет, если вы попытаетесь получить к нему доступ.

Вот статья Microsoft , в которой объясняется, как работает это «пространство имен файлов». По сути, это говорит Windows не выполнять какую-либо обработку строки в тексте и передавать ее прямо в файловую систему. Этот прием также можно использовать для работы с путями длиной более 260 символов.

5 голосов
/ 23 сентября 2008

Хитрый Unix, если ты не знаешь:

Файлы, которые начинаются с - или - являются законными, но с ними трудно работать, так как многие инструменты командной строки считают, что вы предоставляете им опции.

Многие из этих инструментов имеют специальный маркер "-" для обозначения конца опций:

gzip -9vf -- -mydashedfilename
4 голосов
/ 23 сентября 2008

boost :: filesystem Руководство по переносимости содержит много полезной информации.

2 голосов
/ 23 сентября 2008

Ну, для MSDOS / Windows, NUL, PRN, LPT и CON. Они даже вызывают проблемы, если используются с расширением: "NUL.TXT"

1 голос
/ 23 сентября 2008

Если вы не касаетесь специальных каталогов, единственными недопустимыми именами в Linux являются '.' и '..'. Возможно любое другое имя, хотя доступ к некоторым из них из оболочки требует использования escape-последовательностей.

РЕДАКТИРОВАТЬ: Как сказал Винко Vrsalovic, файлы, начинающиеся с '-' и '--', являются болью от оболочки, поскольку эти последовательности символов интерпретируются приложением, а не оболочкой.

...