Какие имена файлов зарезервированы для различных платформ?

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
14
0
8 837
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

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

Нарвался сегодня на эту ерунду. Понятия не имею, почему эти имена файлов являются незаконными, если вы добавляете к ним расширения> :(

Jason S 20.08.2014 00:35

Я думаю, это такие программы, как LINK.EXE (помните это?), Которые принимают одно базовое имя файла, а затем генерируют три разных файла с разным расширением. Затем вы можете просто ввести «nul» или «prn», и программа может просто вслепую добавить расширение, и все будет по-прежнему работать.

James Curran 20.08.2014 00:58

Сложная проблема с Unix, когда вы не знаете:

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

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

gzip -9vf -- -mydashedfilename

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

Обновлено: Как сказал Винко Врсалович, файлы, начинающиеся с «-» и «--», являются болью от оболочки, поскольку эти последовательности символов интерпретируются приложением, а не оболочкой.

Если это правда, как создать имя файла с косой чертой?

Malvineous 13.01.2015 02:28

Да, / недопустим в имени файла ни для одного типа файловой системы.

Basic 09.10.2015 11:14

@ Базовый Не обязательно. В диспетчере объектов ядра NT, который по сути является виртуальной файловой системой, есть только один запрещенный символ: обратная косая черта. Поскольку он использует счетные строки (строки в стиле Pascal / Rust), даже NUL действителен в путях диспетчера объектов NT.

ssokolow 28.01.2021 17:31

@ssokolow Верно, однако, нет инструментов пользовательского пространства, которые разрешают доступ для создания этих путей и, следовательно, нет способа фактически использовать их, которые не сломали бы все (включая проводник). Еще в школе мы использовали API для переименования папок в XP и добавления символа возврата каретки. Используется для того, чтобы ломать проводника довольно сильно.

Basic 28.01.2021 17:55

@Basic Исходный вопрос не указывает, предназначен ли вопрос об использовании командной строки, использовании API и т. д. Он просто спрашивает о подводных камнях ... и наличии VFS API, который поддерживает NUL и / в компонентах пути и может быть доступным через портированные / переносимые библиотеки / утилиты, пытаясь вырваться из 260-символьного ограничения длины пути Win32 и получить больше свободы, подобной Linux, для меня, безусловно, звучит как потенциальная ошибка.

ssokolow 29.01.2021 05:35
Ответ принят как подходящий

От: http://www.grouplogic.com/knowledge/index.cfm/fuseaction/view_Info/docID/111.

The following characters are invalid as file or folder names on Windows using NTFS: /?<>\:*|" and any character you can type with the Ctrl key.

In addition to the above illegal characters the caret ^ is also not permitted under Windows Operating Systems using the FAT file system.

Under Windows using the FAT file system file and folder names may be up to 255 characters long.

Under Windows using the NTFS file system file and folder names may be up to 256 characters long.

Under Window the length of a full path under both systems is 260 characters.

In addition to these characters, the following conventions are also illegal:

  • Placing a space at the end of the name
  • Placing a period at the end of the name

The following file names are also reserved under Windows:

  • aux,
  • com1,
  • com2,
  • ...
  • com9,
  • lpt1,
  • lpt2,
  • ...
  • lpt9,
  • con,
  • nul,
  • prn

aux также не является допустимым именем файла в Windows согласно статье, упомянутой Адамом

Jaco Briers 28.01.2013 14:33

Я считаю легитимность этой статьи сомнительной, поскольку в ней говорится, что в Mac OS X «Имена файлов и папок не могут начинаться с точки '.'», Что абсолютно неверно.

Chris 04.04.2014 02:13

Это не просто имена файлов, которые вы зарезервировали под Windows, это любое из этих имен устройств, за которыми следует любое расширение, например COM5.foo и COM5.bar являются незаконными.

Jason S 20.08.2014 00:32

com0 и lpt0 также не разрешены, согласно моим окнам

user194860 29.06.2020 12:17

Full description of legal and illegal filenames on Windows: http://msdn.microsoft.com/en-us/library/aa365247.aspx

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

mickmackusa 14.05.2019 15:24

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

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

mickmackusa 14.05.2019 15:25

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

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

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

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

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

Я снова попытался удалить созданный файл, но del зависает в командной строке ... Обновлено: я не могу убить событие cmd с помощью диспетчера задач или хакера процесса ... Что здесь происходит?

feedc0de 24.04.2017 23:02

У меня отлично работает. Вы не можете использовать del COM1, потому что, конечно, он попытается получить доступ к последовательному порту вместо файла и вызовет блокировку процесса, ожидая ответа от самого последовательного порта (именно поэтому такие имена файлов зарезервированы и недоступны для используйте в первую очередь.) Если вы использовали метод escape в моем ответе для создания файла, вам придется использовать его и для его удаления: del "\?\C:\Users\username\COM1"

Malvineous 26.04.2017 10:48

Конечно, я использовал тот же путь \\? \ Для удаления. Просто интересно, почему завис мой cmd. Я сдался и переустановил всю свою ОС. Это исправило это довольно быстро.

feedc0de 26.04.2017 20:37

Может быть, вы не заключили его в кавычки или допустили опечатку? Переустановка - это немного перебор, перезагрузка устранила бы проблему!

Malvineous 28.04.2017 04:56

Другие вопросы по теме