недопустимые символы в имени каталога windows
Мир цифровой информации
Если вам кажется, что нет ничего проще, чем придумать имя для файла или папки, то скорее всего вы ошибаетесь. Существуют правила из-за которых нельзя назвать файл любым именем как обычный физический предмет. Для начала проясним, что такое имя файла, и как оно используется.
Понятия «путь» и «имя файла»
Очень часто в компьютерной литературе используются термины «путь» и «имя файла» под разными значениями. Обычно под словом «путь» понимают адрес или расположение файла, т. е. диск, папка и подпапки в которых расположен файл. Однако Microsoft и другие считают, что в путь к файлу входит не только его расположение но и само имя файла. А некоторые подразумевают под словом «путь» только имена файла и папок, в которых он расположен, без указания диска. Некоторые пользователи полагают, что «имя файла» не включает расширение. В данной статье расширение всегда является частью имени файла. На примере ниже синим цветом выделен путь к файлу, а красным имя файла.
X:\папка\подпапка\ файл.расширение
Зарезервированные символы и имена
Ограничения на длины имен файлов и путей
Существуют ограничения на длину имени файла и на длину пути. Абсолютное ограничение длины имени файла вместе включая путь к нему равно 260 символам. Этот предел называют термином MAX_PATH. На самом же деле на практике пределы для имен еще меньше из-за ряда других ограничений. Например, каждая строка на конце должна содержать так называемый нулевой символ, который обозначает конец строки. Несмотря на то, что маркер конца строки не отображается, он учитывается как отдельный символ при подсчете длины, а значит остается 259 символов доступных для имени файла и пути к нему. Первые три символа в пути используются для обозначения диска (например, C:\). Это уменьшает предел для имен папок, подпапок и файла до 256 символов.
На имя объекта (папки или файла) наложено ограничение длины 255 символов. Этот предел действителен только, если объект не расположен внутри папки. Так как при расположении объекта внутри папки, сумма длин всех папок в которых он расположен, разделителей и имени объекта ограничена 256 символами, то предел длины самого имени объекта меньше 255 символов.
Какие символы запрещены в именах каталогов Windows и Linux?
Что еще мне не хватает?
Однако мне нужно подробное руководство, которое учитывает двухбайтовые символы. Связывание с внешними ресурсами хорошо для меня.
Мне нужно сначала создать каталог в файловой системе, используя имя, которое может содержат запрещенные символы, поэтому я планирую заменить эти символы на подчеркивания. Затем мне нужно записать этот каталог и его содержимое в ZIP файл (с использованием Java), поэтому любые дополнительные советы, касающиеся имен каталогов zip будет оценено.
ОТВЕТЫ
Ответ 1
Ответ 2
Пусть будет проще и ответь сначала на вопрос.
Запрещенные печатные символы ASCII:
Непечатные символы
Если ваши данные поступают из источника, который разрешает непечатные символы, есть еще что проверить.
Примечание. Хотя в файловых системах Linux/Unix разрешено создавать файлы с управляющими символами в имени файла, пользователям может показаться кошмарным иметь дело с такими файлами.
Зарезервированные имена файлов
Следующие имена файлов зарезервированы:
(как самостоятельно, так и с произвольными расширениями файлов, например LPT1.txt ).
Другие правила
Имена файлов не могут заканчиваться пробелом или точкой.
Ответ 3
Другие люди рассмотрели правила Windows.
Обратите внимание, что MacOS X имеет регистронезависимую файловую систему.
1 Керниган и Пайк из «Практики программирования» так и сказали в главе 6 «Тестирование», §6.5 Стресс-тесты:
Когда Стив Борн писал свою оболочку Unix (известную как оболочка Борна), он создал каталог из 254 файлов с односимвольными именами, по одному на каждое значение байта, кроме ‘\0’ и косой черты, двух символов, которые не может появиться в именах файлов Unix. Он использовал этот каталог для всевозможных тестов сопоставления с образцом и токенизации. (Тестовый каталог, конечно, был создан программой.) В течение многих лет этот каталог был бичем программ для обхода файловых деревьев; это проверило их на разрушение.
Ответ 4
Вместо того, чтобы создавать черный список символов, вы можете использовать белый список. Учитывая все это, диапазон символов, которые имеют смысл в контексте имен файлов или каталогов, довольно мал, и если у вас нет особых требований к именованию, ваши пользователи не будут применять его к вашему приложению, если они не смогут использовать всю таблицу ASCII.
Это не решает проблему зарезервированных имен в целевой файловой системе, но с белым списком легче снизить риски в источнике.
В этом духе это ряд символов, которые можно считать безопасными:
И любые дополнительные безопасные символы, которые вы хотите разрешить. Помимо этого, вам просто нужно применить некоторые дополнительные правила, касающиеся пробелов и точек. Обычно этого достаточно:
Это уже позволяет довольно сложные и бессмысленные имена. Например, эти имена будут возможны с этими правилами, и будут действительными именами файлов в Windows/Linux:
По сути, даже с таким количеством символов в белом списке вы все равно должны решить, что на самом деле имеет смысл, и соответствующим образом проверить/скорректировать имя. В одном из моих приложений я использовал те же правила, что и выше, но удалил все дублирующие точки и пробелы.
Ответ 5
Хорошо, если только в исследовательских целях, то лучше всего посмотреть на эту запись в Википедии по именам файлов.
Если вы хотите написать портативную функцию для проверки ввода пользователя и создания имен файлов на основе этого, короткий ответ не. Взгляните на переносимый модуль, например Perl File:: Spec, чтобы взглянуть на все прыжки, необходимые для выполнения такой «простой» задачи.
Ответ 6
Ответ 7
Для Windows вы можете проверить его с помощью PowerShell
Для отображения кодов UTF-8 вы можете конвертировать
Ответ 8
Лучшее предложение, которое я мог придумать, состояло в том, чтобы позволить пользователю называть файл так, как ему нравится. Используя обработчик ошибок, когда приложение пытается сохранить файл, перехватите все исключения, предположите, что виновато имя файла (очевидно, после того, как убедитесь, что путь сохранения тоже был в порядке), и запросите у пользователя новое имя файла. Для достижения наилучших результатов поместите эту процедуру проверки в цикл, который продолжается до тех пор, пока пользователь не поймет это правильно или не сдастся. Лучше всего сработало для меня (по крайней мере, в VBA).
Ответ 9
Например, хотя может быть законным назвать файл 1>&2 или 2>&1 в Unix, имена файлов, такие как это, могут быть неверно истолкованы при использовании в командной строке.
Ответ 10
В Windows 10 (2019) следующие символы запрещены из-за ошибки при попытке их ввести:
Имя файла не может содержать следующие символы:
Ответ 11
При создании интернет-ярлыков в Windows, чтобы создать имя файла, он пропускает недопустимые символы, кроме косой черты, которая преобразуется в минус.
Ответ 12
Ответ 13
У меня была такая же потребность, и я искал рекомендации или стандартные ссылки и наткнулся на эту тему. Мой текущий черный список символов, которых следует избегать в именах файлов и каталогов:
Список запрещённых имён для файлов и каталогов в Windows
В современном с ума сошедшем мире всё перевернулось с ног на голову нетбуки стали называть ноутбуками, каталоги именуют нынче папками (разделы наверно мамками:), вместо Ё пишут Е и пашло поехало 🙂
Согласно Обзор файловых систем FAT, HPFS и NTFS в системе Windows нельзя обычным образом создать файлы и каталоги с именами:
Только после полного отключения блокировщика скриптов и рекламы на этом месте появится полезная подсказка/ссылка/код/пример конфигурации/etc!
Также в именах для файлов и каталогов нельзя использовать символы:
На самом деле файлы и каталоги с запрещёнными (зарезервированными) именами создать можно, если очень хочется:
Только после полного отключения блокировщика скриптов и рекламы на этом месте появится полезная подсказка/ссылка/код/пример конфигурации/etc!
Лучше не пытаться свернуть мозги системе, а то гляди может и получиться. Всех с новым годом, желаю всем в новом году счастья, здоровья и всяческих баг, тьфу ты. т.е. благ!;))
Ссылки по теме:
Рекомендуемый контент
А тут же ж мог быть рекомендуемый контент от гугла 🙂 Для отображения рекомендуемого контента необходимо в браузере разрешить выполнение JavaScript скриптов, включая скрипты с доменов googlesyndication.com и doubleclick.net
Вы не любите рекламу!? Напрасно!:) На нашем сайте она вовсе ненавязчивая, а потому для нашего сайта можете полностью отключить AdBlock (uBlock/uBlock Origin/NoScript) и прочие блокировщики рекламы! AdBlock/uBlock может препятствовать нормальной работе системы поиска по сайту, отображению рекомендуемого контента и прочих сервисов Google. Рекомендуем полностью отключить блокировщик рекламы и скриптов, а также разрешить фреймы (aka iframe).
Именование файлов, путей и пространств имен
все файловые системы, поддерживаемые Windows, используют концепцию файлов и каталогов для доступа к данным, хранящимся на диске или устройстве. Windows разработчики, работающие с Windowsными api-интерфейсами для файлов и устройств, должны понимать различные правила, соглашения и ограничения имен файлов и каталогов.
Доступ к данным можно получить с дисков, устройств и сетевых ресурсов с помощью API файлового ввода-вывода. Файлы и каталоги вместе с пространствами имен являются частью концепции пути, которая представляет собой строковое представление места получения данных независимо от диска, устройства или сетевого подключения для конкретной операции.
Некоторые файловые системы, такие как NTFS, поддерживают связанные файлы и каталоги, которые также следуют соглашениям об именовании файлов и правилам, как обычный файл или каталог. Дополнительные сведения см. в разделах жесткие связи, соединения и точки повторного анализа и операции с файлами.
Дополнительные сведения см. в следующих подразделах:
дополнительные сведения о настройке Windows 10 для поддержки длинных путей к файлам см. в разделе ограничение максимальной длины пути.
Имена файлов и каталогов
Ограничения количества символов также могут быть разными и могут различаться в зависимости от используемого формата префикса файловой системы и имени пути. Это усложняется за счет поддержки механизмов обратной совместимости. Например, более старая файловая система MS-DOS FAT поддерживает не более 8 символов для базового имени файла и 3 символа для расширения, а всего 12 символов, включая разделитель точек. Обычно это называется именем файла 8,3. Windows файловые системы FAT и NTFS не ограничиваются 8,3 именами файлов, так как они имеют длинную поддержку имен файлов, но по-прежнему поддерживают версию 8,3 длинных имен файлов.
Соглашения об именах
Следующие фундаментальные правила позволяют приложениям создавать и обрабатывать допустимые имена файлов и каталогов независимо от файловой системы.
Используйте точку, чтобы отделить базовое имя файла от расширения в имени каталога или файла.
Используйте обратную косую черту ( \ ) для разделения компонентов пути. Обратная косая черта разделяет имя файла от пути к нему и одно имя каталога из другого имени каталога в пути. Нельзя использовать обратную косую черту в имени для фактического файла или каталога, так как это зарезервированный символ, разделяющий имена в компоненты.
Не думайте о чувствительности к регистру. Например, имена OSCAR, OSCAR и OSCAR должны быть одинаковыми, даже если некоторые файловые системы (такие как POSIX-совместимая файловая система) могут считать их разными. Обратите внимание, что NTFS поддерживает семантику POSIX для чувствительности к регистру, но это не поведение по умолчанию. Дополнительные сведения см. в разделе CreateFile.
Обозначения томов (буквы диска) не учитывают регистр. Например, «D: \ » и «d: \ » ссылаются на один и тот же том.
Используйте любой символ в текущей кодовой странице для имени, включая символы Юникода и символы в расширенном наборе символов (128 – 255), за исключением следующих:
Следующие зарезервированные символы:
Символы, целочисленное представление которых находится в диапазоне от 1 до 31, за исключением альтернативных потоков данных, в которых разрешены эти символы. дополнительные сведения о файловых потоках см. в разделе file Потоки.
Любой другой символ, который не разрешен целевой файловой системой.
Используйте точку в качестве компонента каталога в пути для представления текущего каталога, например. \temp.txt «. Дополнительные сведения см. в разделе paths.
Используйте две последовательные точки (..) как компонент каталога в пути, чтобы представить родителя текущего каталога, например. \temp.txt «. Дополнительные сведения см. в разделе paths.
Не используйте следующие зарезервированные имена для имени файла:
CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 и LPT9. Также Избегайте этих имен сразу после расширения; Например, не рекомендуется использовать NUL.txt. Дополнительные сведения см. в разделе Пространства имен.
Не завершайте имя файла или каталога с пробелом или точкой. хотя базовая файловая система может поддерживать такие имена, оболочка Windows и пользовательский интерфейс не поддерживаются. Однако можно указать точку в качестве первого символа имени. Например, «. temp».
Короткие и длинные имена
Длинное имя файла считается любым именем файла, которое превышает короткое соглашение об именовании в стиле MS-DOS (также называемое 8,3). при создании длинного имени файла Windows также может создать короткую форму 8,3 имени, именуемую псевдонимом 8,3 или коротким именем, а также сохранить ее на диске. Это 8,3 может быть отключено для повышения производительности в зависимости от конкретной файловой системы.
Windows server 2008, Windows Vista, Windows Server 2003 и Windows XP: 8,3 псевдонимы не могут быть отключены для указанных томов до Windows 7 и Windows Server 2008 R2.
Во многих файловых системах имя файла будет содержать символ тильды (
) в каждом компоненте имени, которое слишком длинное для соответствия правилам именования 8,3.
Не все файловые системы следуют соглашению о подстановке тильды, и системы могут быть настроены на отключение создания псевдонима 8,3, даже если они обычно поддерживаются. Поэтому не следует предполагать, что псевдоним 8,3 уже существует на диске.
Чтобы запросить 8,3 имен файлов, длинных имен файлов или полного пути к файлу из системы, рассмотрите следующие варианты.
в новых файловых системах, таких как NTFS, exFAT, udf и FAT32, Windows сохраняет длинные имена файлов на диске в юникоде, что означает, что исходное имя длинного файла всегда сохраняется. Это справедливо даже в том случае, если длинное имя файла содержит символы национальных алфавитов, независимо от того, какая кодовая страница активна во время операции чтения или записи с диска.
файлы, использующие длинные имена файлов, можно скопировать между разделами файловой системы NTFS и Windows разделами файловой системы FAT без потери сведений об имени файла. Это может быть неверно для старых файлов MS-DOS FAT и некоторых типов файловых систем CDFS (CD-ROM) в зависимости от фактического имени файла. В этом случае короткое имя файла подставляется по возможности.
Если компонент пути является именем файла, то он должен быть последним компонентом.
Каждый компонент пути также будет ограничен максимальной длиной, указанной для конкретной файловой системы. Как правило, эти правила делятся на две категории: Short и Long. Обратите внимание, что имена каталогов хранятся в файловой системе как файлы особого типа, но правила именования для файлов также применяются к именам каталогов. Для суммирования путь — это просто строковое представление иерархии между всеми каталогами, которые существуют для определенного имени файла или каталога.
Полные и относительные пути
для функций API Windows, которые управляют файлами, имена файлов часто могут относиться к текущему каталогу, в то время как некоторым api требуется полный путь. Имя файла задается относительно текущего каталога, если он не начинается с одного из следующих:
Если имя файла начинается только с обозначения диска, но не с обратной косой черты после двоеточия, то оно интерпретируется как относительный путь к текущему каталогу на диске с указанной буквой. Обратите внимание, что текущий каталог может быть или не являться корневым каталогом, в зависимости от того, на что он был установлен во время последней операции «изменение каталога» на этом диске. Ниже приведены примеры этого формата.
Путь также считается относительным, если он содержит «двойные точки»; то есть две точки вместе находятся в одном компоненте пути. Этот Специальный описатель используется для обозначения каталога над текущим каталогом, в противном случае известный как «родительский каталог». Ниже приведены примеры этого формата.
Относительные пути могут сочетать оба типа примеров, например «К. \tmp.txt «. Это полезно, поскольку, несмотря на то, что система отслеживает текущий диск вместе с текущим каталогом этого диска, она также следит за текущими каталогами на разных буквах диска (если в системе несколько), независимо от того, какой из обозначений установлен в качестве текущего диска.
Ограничение максимальной длины пути
Пространства имен
существует две основные категории соглашений о пространствах имен, используемых в Windows api, которые обычно называются пространствами имен NT и пространствами имен Win32. Пространство имен NT было разработано как пространство имен самого низкого уровня, в котором могут существовать другие подсистемы и пространства имен, включая подсистему Win32 и, по расширениям, пространства имен Win32. POSIX — это еще один пример подсистемы в Windows, построенной на основе пространства имен NT. ранние версии Windows также определили несколько предопределенных или зарезервированных имен для определенных специальных устройств, таких как порты связи (последовательные и параллельные) и консоль экрана по умолчанию, как часть того, что теперь называется пространством имен устройств NT, и все еще поддерживаются в текущих версиях Windows для обеспечения обратной совместимости.
Пространства имен файлов Win32
Префиксы и соглашения пространств имен Win32 приведены в этом разделе и в следующем разделе с описанием того, как они используются. обратите внимание, что эти примеры предназначены для использования с функциями API Windows и не всегда работают с приложениями оболочки Windows, такими как Windows Explorer. по этой причине существует более широкий диапазон возможных путей, чем обычно доступно в Windows приложениях оболочки, а Windows приложения, использующие его, можно разрабатывать с помощью этих соглашений по пространству имен.
Так как он отключает автоматическое расширение строки пути, \ \ префикс «? \ » также позволяет использовать «..» и «.» в именах путей, которые могут быть полезны при попытке выполнить операции с файлом, в противном случае зарезервированные описатели относительных путей в составе полного пути.
Обратите внимание, что для префикса «?» можно использовать только API-интерфейсы Юникод, что \ \ \ позволяет превысить максимальный _ путь
Пространства имен устройств Win32
при работе с функциями API Windows следует использовать \ \ префикс «. \ » для доступа только к устройствам, а не файлам.
Пространства имен NT
чтобы сделать эти объекты устройств доступными для приложений Windows, драйверы устройств создают символьную ссылку (символьную ссылку) в пространстве имен Win32 «Global??» для соответствующих объектов устройств. Например, COM0 и COM1 в разделе «Global??» подкаталог — это просто символических ссылок Serial0 и Serial1, «C:» — это символьную ссылку до HarddiskVolume1, «отображается physicaldrive0» — символьную ссылку до DR0 и т. д. без символьную ссылку указанное устройство «Xxx» будет недоступно для любого Windows приложения, использующего соглашения о пространстве имен Win32, как описано выше. Однако для этого устройства можно открыть маркер, используя любые интерфейсы API, поддерживающие абсолютный путь к пространству имен NT формата » \ устройство \ xxx».
Какие символы запрещены в именах каталогов Windows и Linux?
Что еще мне не хватает?
Однако мне нужно подробное руководство, учитывающее двухбайтовые символы. Связывание с внешними ресурсами хорошо для меня.
Мне нужно сначала создать каталог в файловой системе, используя имя, которое может содержать запрещенные символы, поэтому я планирую заменить эти символы подчеркиванием. Затем мне нужно записать этот каталог и его содержимое в Zip-файл (с использованием Java), поэтому любые дополнительные советы, касающиеся имен Zip-каталогов, будут оценены.
Давайте будем проще и ответим сначала на вопрос.
Запрещенные печатаемые символы ASCII :
Непечатаемые символы
Если ваши данные поступают из источника, который разрешает непечатные символы, есть еще что проверить.
Зарезервированные имена файлов
Следующие имена файлов зарезервированы:
(как самостоятельно, так и с произвольными расширениями файлов, например, LPT1.txt ).
Другие правила
Имена файлов не могут заканчиваться пробелом или точкой.
Вместо того, чтобы создавать черный список символов, вы можете использовать белый список. Учитывая все это, диапазон символов, которые имеют смысл в контексте имени файла или каталога, довольно мал, и если у вас нет особых требований к именованию, ваши пользователи не будут применять его к вашему приложению, если они не могут использовать весь ASCII таблица.
Это не решает проблему зарезервированных имен в целевой файловой системе, но с белым списком легче снизить риски в источнике.
В этом духе это ряд символов, которые можно считать безопасными:
И любые дополнительные безопасные символы, которые вы хотите разрешить. Помимо этого, вам просто нужно применить некоторые дополнительные правила, касающиеся пробелов и точек. Этого обычно достаточно:
Это уже позволяет довольно сложные и бессмысленные имена. Например, эти имена будут возможны с этими правилами, и будут действительными именами файлов в Windows/Linux:
По сути, даже с таким количеством символов в белом списке вы все равно должны решить, что на самом деле имеет смысл, и соответствующим образом проверить/скорректировать имя. В одном из моих приложений я использовал те же правила, что и выше, но удалил дублирующиеся точки и пробелы.