- Какие символы запрещены в именах каталогов Windows и Linux?
- 19 ответов
- Запрещенные символы в именах каталогов Windows и Linux
- Запрещенные символы в именах каталогов Windows и Linux
- Linux/Unix
- Windows
- Запрещенные непечатаемые символы
- Linux/Unix
- Windows
- Запрещенные (зарезервированные) имена
- Заключение
- Похожие записи:
- Какие символы запрещены в именах каталогов Windows и Linux?
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
Какие символы запрещены в именах каталогов Windows и Linux?
Однако мне нужно подробное руководство, учитывающее двухбайтовые символы. Связывание с внешними ресурсами хорошо для меня.
Мне нужно сначала создать каталог в файловой системе, используя имя, которое может содержать запрещенные символы, поэтому я планирую заменить эти символы подчеркиванием. Затем мне нужно записать этот каталог и его содержимое в zip-файл (с использованием Java), поэтому любые дополнительные советы, касающиеся имен zip-каталогов, будут оценены.
19 ответов
«Полное руководство» по запрещенным символам имени файла не будет работать в Windows, поскольку оно резервирует имена файлов и символы. Да, такие персонажи * » ? и другие запрещены, но существует бесконечное количество имен, состоящих только из допустимых символов, которые запрещены. Например, пробелы и точки являются допустимыми символами имени файла, но имена, состоящие только из этих символов, запрещены.
Windows не различает прописные и строчные буквы, поэтому вы не можете создать папку с именем A если кто-то назвал a уже существует. Хуже, казалось бы, разрешенные имена, такие как PRN а также CON и многие другие зарезервированы и не допускаются. Windows также имеет несколько ограничений по длине; имя файла, допустимое в одной папке, может стать недействительным при перемещении в другую папку. Правила именования файлов и папок указаны в MSDN.
Как правило, вы не можете использовать сгенерированный пользователем текст для создания имен каталогов Windows. Если вы хотите, чтобы пользователи могли называть все, что они хотят, вы должны создать безопасные имена, такие как A , AB , A2 и др. сохраняйте сгенерированные пользователем имена и их пути в файле данных приложения и выполняйте сопоставление путей в своем приложении.
Если вам абсолютно необходимо разрешить сгенерированные пользователем имена папок, единственный способ определить, являются ли они недействительными, — это перехватить исключения и предположить, что имя недействительно. Даже это чревато опасностью, так как исключения, создаваемые для отказа в доступе, отключенных дисков и нехватки дискового пространства, пересекаются с теми, которые могут быть выброшены для недопустимых имен. Вы открываете одну огромную банку боли.
Давайте будем простыми и сначала ответим на вопрос.
- Запрещенные печатные символы ASCII:
Linux/Unix:
< (less than) >(greater than) : (colon - sometimes works, but is actually NTFS Alternate Data Streams) " (double quote) / (forward slash) \ (backslash) | (vertical bar or pipe) ? (question mark) * (asterisk)
0-31 (ASCII control characters)
Примечание. Хотя в файловых системах Linux/Unix разрешено создавать файлы с управляющими символами в имени файла, пользователям может показаться кошмаром иметь дело с такими файлами.
CON, PRN, AUX, NUL COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9
В Linux и других Unix-системах есть только два символа, которые не могут появляться в имени файла или каталога, и это NUL ‘\0’ и косая черта ‘/’ , Разумеется, косая черта может появляться в имени пути, разделяющем компоненты каталога.
Ходят слухи, что у Стивена Борна (известной «оболочки») был каталог, содержащий 254 файла, по одному на каждую букву (код символа), которая может появиться в имени файла (исключая / , ‘\0’ ; имя . был текущий каталог, конечно). Он использовался для тестирования оболочки Bourne и регулярно наносил ущерб неосторожным программам, таким как программы резервного копирования.
Другие люди рассмотрели правила Windows.
Обратите внимание, что MacOS X имеет регистронезависимую файловую систему.
1 Керниган и Пайк из «Практики программирования» так и сказали в главе 6 «Тестирование», §6.5 Стресс-тесты:
Когда Стив Борн писал свою оболочку Unix (известную как оболочка Борна), он создал каталог из 254 файлов с односимвольными именами, по одному на каждое значение байта, кроме ‘\0’ и косая черта, два символа, которые не могут появляться в именах файлов Unix. Он использовал этот каталог для всевозможных тестов сопоставления с образцом и токенизации. (Тестовый каталог, конечно, был создан программой.) В течение многих лет этот каталог был проклятием программ для обхода файловых деревьев; это проверило их на разрушение.
Вместо того, чтобы создавать черный список символов, вы можете использовать белый список. Учитывая все это, диапазон символов, который имеет смысл в контексте имен файлов или каталогов, довольно мал, и если у вас нет особых требований к именованию, ваши пользователи не будут применять его к вашему приложению, если они не смогут использовать всю таблицу ASCII.
Это не решает проблему зарезервированных имен в целевой файловой системе, но с белым списком легче снизить риски в источнике.
В этом духе это ряд символов, которые можно считать безопасными:
- Буквы (az AZ) — также символы Юникода, если необходимо
- Цифры (0-9)
- Нижнее подчеркивание (_)
- Дефис (-)
- Космос
- Точка (.)
И любые дополнительные безопасные символы, которые вы хотите разрешить. Помимо этого, вам просто нужно применить некоторые дополнительные правила, касающиеся пробелов и точек. Обычно этого достаточно:
- Имя должно содержать хотя бы одну букву или цифру (чтобы избежать только точек / пробелов)
- Имя должно начинаться с буквы или цифры (чтобы избежать начальных точек / пробелов)
Это уже позволяет довольно сложные и бессмысленные имена. Например, эти имена будут возможны с этими правилами и будут действительными именами файлов в Windows/Linux:
По сути, даже с таким количеством символов в белом списке вы все равно должны решить, что на самом деле имеет смысл, и соответствующим образом проверить / скорректировать имя. В одном из моих приложений я использовал те же правила, что и выше, но удалил все дублирующие точки и пробелы.
Запрещенные символы в именах каталогов Windows и Linux
Системы Windows и Linux позволяют создавать и называть файлы и каталоги в соответствии с вашими требованиями, но некоторые символы нельзя использовать для названия каталогов и файлов. В этой статье мы узнаем о запрещенных символах в именах каталогов Windows и Linux.
Запрещенные символы в именах каталогов Windows и Linux
Некоторые символы являются печатными символами ASCII, а некоторые — непечатными. Вот символы, которые не поддерживаются для имен файлов и каталогов.
Linux/Unix
Windows
< (меньше чем) >(больше чем) : (двоеточие - иногда работает, но на самом деле это NTFS Alternate Data Streams) " (двойная кавычка) / (прямая косая черта) \ (обратная косая черта) | (вертикальная полоса или труба) ? (вопросительный знак) * (звездочка)
Запрещенные непечатаемые символы
Здесь перечислены непечатаемые символы, которые нельзя использовать в качестве имен файлов или имен каталогов.
Здесь перечислены непечатаемые символы, которые нельзя использовать в качестве имен файлов или имен каталогов.
Linux/Unix
Windows
Запрещенные (зарезервированные) имена
Помимо вышеперечисленных символов, существуют также определенные зарезервированные имена файлов, которые нельзя использовать в Windows, как с расширением, так и без него.
- CON, PRN, AUX, NUL
- COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9
- LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9
Заключение
Также помните, что Windows не различает символы верхнего и нижнего регистра в именах файлов и каталогов, поэтому если вы попытаетесь назвать один файл как a.txt, а другой файл в том же каталоге как A.txt, это не позволит вам этого сделать.
Наконец, следует отметить, что в Windows имена файлов и каталогов не могут заканчиваться пробельными символами.
В этой статье мы узнали о запрещенных символах для имен файлов и каталогов в Windows и Linux.
Похожие записи:
Какие символы запрещены в именах каталогов Windows и Linux?
Я знаю, что «/» является недопустимым в Linux, а в Windows (я думаю) недопустимы следующие «* . » / \ [ ] : ; |,»
Что еще я упустил?
Мне нужно полное руководство, которое учитывало бы двухбайтовые символы. Ссылки на внешние ресурсы меня также устраивают.
Сначала мне нужно создать каталог в файловой системе, используя имя, которое может содержать запрещенные символы, поэтому я планирую заменить эти символы символами подчеркивания. Затем мне нужно записать этот каталог и его содержимое в zip-файл (используя Java), поэтому любые дополнительные советы относительно имен zip-каталогов будут приняты с благодарностью.
Ответ 1
- /(прямая косая черта) .
- <(меньше чем) .
- > (больше чем) .
- :(двоеточие – иногда работает, но на самом деле это NTFS Alternate Data Streams) .
- » (двойная кавычка) .
- / (прямая косая черта) .
- \ (обратная косая черта) .
- | (вертикальная полоса или труба) .
- ? (вопросительный знак) .
- * (звездочка) .
- 0 (байт NULL) .
- 0-31 (управляющие символы ASCII) .
- CON, PRN, AUX, NUL .
- COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 .
- LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9 .
- Имена файлов не могут заканчиваться пробелом или точкой.
- Вы об этом не спрашивали, но на всякий случай: Двоеточие «:» и прямой слэш «/» в зависимости от контекста не разрешены (например, Finder поддерживает слэш, терминал – двоеточие).
Ответ 2
«Исчерпывающее руководство» по запрещенным символам имен файлов не будет работать в Windows, потому что она резервирует имена файлов, а также символы. Да, символы типа «* » ?» и другие запрещены, но существует бесконечное количество имен, состоящих только из допустимых символов, которые запрещены. Например, пробелы и точки являются допустимыми символами имени файла, но имена, состоящие только из этих символов, запрещены.
Windows не различает символы верхнего и нижнего регистров, поэтому вы не можете создать папку с именем «A», если папка с именем «a» уже существует. Хуже того, такие, казалось бы, разрешенные имена, как «PRN» или «CON», и многие другие, зарезервированы и не разрешены. Windows также имеет несколько ограничений по длине; имя файла, допустимое в одной папке, может стать недействительным при перемещении в другую папку. Правила именования файлов и папок приведены в документации Microsoft.
В общем случае нельзя использовать пользовательский текст для создания имен каталогов Windows. Если вы хотите разрешить пользователям называть все, что они хотят, вы должны создавать безопасные имена, такие как A, AB, A2 и т. д., хранить созданные пользователем имена и их эквиваленты путей в файле данных приложения и выполнять сопоставление путей в вашем приложении.
Если вам обязательно нужно разрешить пользовательские имена папок, единственный способ определить, являются ли они недействительными, – это ловить исключения и считать, что имя недействительно. Даже это чревато опасностью, поскольку исключения, возникающие при отказе в доступе, отключении дисков и отсутствии места на диске, пересекаются с исключениями, которые могут возникать при недействительных именах .
Ответ 3
В оболочках Unix вы можете заключить в одинарные кавычки почти все символы. За исключением одинарной кавычки, и вы не можете выразить управляющие символы, потому что «\» не расширяется. Доступ к самой одинарной кавычке из строки в кавычках возможен, потому что вы можете объединять строки с одинарными и двойными кавычками, например так, «’I»»»m»», который может быть использован для доступа к файлу под названием «I’m» (здесь также возможна двойная кавычка).
Таким образом, вам следует избегать всех управляющих символов, потому что их слишком сложно вводить в оболочке. Остальное возможно, особенно файлы, начинающиеся с тире, потому что большинство команд считывают их как опции, если только перед ними не стоят два тире «—«, или вы не указываете их с помощью «./», что также скрывает начальное «-«.
Если вы хотите быть вежливым, не используйте ни один из символов, которые оболочка и типичные команды используют как синтаксические элементы, иногда зависящие от позиции, например, вы можете использовать «-«, но не как первый символ; то же самое с «.», вы можете использовать его как первый символ, только когда вы имеете в виду («скрытый файл»). Когда вы имеете в виду, ваши имена файлов представляют собой управляющие последовательности VT100.
Ответ 4
Лучшее предложение, которое я смог придумать, – позволить пользователю называть файл так, как ему нравится. Используя обработчик ошибок, когда приложение пытается сохранить файл, перехватывайте любые исключения, предполагая, что виновато имя файла (очевидно, убедившись, что путь сохранения также в порядке), и предлагайте пользователю задать новое имя файла. Для достижения наилучших результатов поместите эту процедуру проверки в цикл, который продолжается до тех пор, пока пользователь не получит правильное имя или не отмени т операцию. Это работает лучше всего (по крайней мере, в VBA).
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.