![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Portability GuideBoost , ,
|
Home Tutorial Reference FAQ Releases Portability V3 Intro V3 Design Deprecated Bug Reports |
Введение
name_check Функции
Рекомендации по именам файлов и каталогов
Как и любая другая программа на C++, которая выполняет операции ввода/вывода, нет никакой гарантии, что программа использует Boost. Файловая система будет переносима между операционными системами. Критические аспекты ввода/вывода, такие как то, как операционная система интерпретирует пути, не определены в стандартах C и C++.
Невозможно узнать, будет ли имя файла или каталога действительным (и, следовательно, переносимым) для неизвестной операционной системы. Всегда существует вероятность того, что операционная система может использовать необычные имена (например, цифры менее 4096) или очень ограниченные по размеру (например, максимум шесть имен символов). Другими словами, переносимость никогда не бывает абсолютной; она всегда относительна к конкретным операционным системам или файловым системам.
Однако можно заранее узнать, будет ли каталог или имя файла действительным для конкретной операционной системы. Также можно создавать имена, которые могут быть переносимы на большое количество современных и устаревших операционных систем.
Почти все современные операционные системы поддерживают несколько файловых систем. Как минимум, они поддерживают нативную файловую систему плюс файловую систему CD-ROM (обычно ISO-9669, часто с расширениями Juliet).
Каждая файловая система может иметь свои собственные правила именования. Например, современные версии Windows поддерживают файловые системы NTFS, FAT, FAT32 и ISO-9660, и правила именования этих файловых систем различаются. Каждая файловая система может также иметь различные правила для общей действительности пути, такие как максимальная длина или количество подкаталогов. Некоторые устаревшие системы имеют разные правила для имен каталогов по сравнению с обычными именами файлов.
В результате функции Boost.Filesystem name_check не могут гарантировать переносимость каталога и имени файла. Скорее, они предназначены для того, чтобы дать программисту возможность для борьбы, чтобы достичь портативности путем раннего обнаружения общих проблем с именами.
Функция name_check возвращается истинной, если ее аргумент действителен в качестве каталога и обычного имени файла для конкретной операционной или файловой системы. Предусмотрен ряд этих функций.
Функция portable_name представляет особый интерес, поскольку она была тщательно разработана для обеспечения широкой переносимости, но не слишком ограничивает выразительность.
Library Supplied name_check Functions | |
Function | Description |
portable_posix_name(const
std::string& name) |
Возврат: истинно , если !name.empty() && name содержит только символы, указанные в Портативный набор символов имени файла , как определено в POSIX ( www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap0?tid=3).Разрешенные символы: 0-9 , a-z , A-Z , . , '_' и '-' .Использовать: приложения, которые должны быть переносимы на любую систему POSIX. |
windows_name(const
std::string& name) |
Возврат: true, если !name.empty() && name содержит только символы, указанные платформой Windows SDK как действительные независимо от файловой системы && (name is "." ".." или не заканчивается отставанием пространства или периода. Разрешенные символы - это все, кроме |
portable_name(const
std::string& name) |
Возврат: Windows_name(name) &&portable_posix_name(name) && (имя "." , а первый символ не период или дефис ) .Использовать: приложения, которые должны быть переносимы на самые разные современные операционные системы, большие и малые, а также на некоторые устаревшие O/S. Первый символ, не являющийся ограничением периода или дефиса, является требованием нескольких более старых операционных систем. |
portable_directory_name(const std::string& name) |
Возврат: portable_name(name) && (имя "." или ".." или не содержит периодов ) .Использовать: приложения, которые должны быть переносимы на самые разные платформы, включая OpenVMS. |
portable_file_name(const std::string& name) |
Возврат: portable_name(name) && За любым периодом следует один-три дополнительных непериодических символа.Использовать: приложения, которые должны быть переносимы на самые разные платформы, включая OpenVMS и другие системы, имеющие концепцию "расширения файла", но ограничивающие его длину. |
native(const
std::string& name) |
Возврат: Определение реализации. Возвращает true для имен, которые считаются действительными для собственных файловых систем операционной системы. Примечание: Может возвращать true для некоторых имен, которые не считаются действительными для операционной системы при любых условиях (особенно для операционных систем, поддерживающих несколько файловых систем) |
Recommendation | Rationale |
Limit file and directory names to the characters A-Z, a-z, 0-9, period, hyphen, and
underscore. Используйте любую из функций проверки имени для обеспечения соблюдения этой рекомендации. | Это символы, указанные стандартом POSIX для портативных каталогов и имен файлов, а также действительны для Windows, Mac и многих других современных файловых систем. |
Не используйте период или дефис в качестве первого символа имени. Не используйте период в качестве последнего символа имени. Используйте portable_name, portable_directory_name или portable_file_name для обеспечения выполнения этой рекомендации. | Некоторые операционные системы обрабатывают специальные правила для первого символа имен. POSIX, например. Windows не допускает период в качестве последнего символа. |
Не используйте периоды в именах каталогов. Использовать portable_directory_name для обеспечения выполнения этой рекомендации. | Требование для ISO-9660 без расширений Juliet, файловой системы OpenVMS и других унаследованных систем. |
Не используйте больше одного периода в имени файла и ограничьте часть после периода тремя символами. Использовать portable_file_name для обеспечения соблюдения этой рекомендации. | Требование для уровня ISO-9660 1, файловой системы OpenVMS и других унаследованных систем. |
Не думайте, что имена чувствительны к случаю. Например, не ожидайте, что каталог сможет содержать отдельные элементы, называемые "Foo" и "foo". | Некоторые файловые системы нечувствительны к регистру. Например, Windows NTFS сохраняет чехол так, как он хранит имена, но чехол нечувствителен при поиске имен (если он не работает под подсистемой POSIX, в этом случае он выполняет чувствительный поиск). |
Не думайте, что имена нечувствительны. Например, не ожидайте, что файл, созданный с именем "Foo", будет успешно открыт с именем "foo". | Некоторые файловые системы чувствительны к регистру. Например, POSIX. |
Не используйте дефисы в именах. | Уровень 1 ISO-9660 и, возможно, некоторые устаревшие системы, не разрешают дефисы. |
Ограничьте длину строки, возвращаемой путем::string() до 255 символов. Обратите внимание, что ISO 9660 имеет явный предел глубины дерева каталогов 8, хотя этот предел глубины удаляется расширениями Juliet. | Некоторые операционные системы устанавливают ограничения на общую длину пути. Например, Windows 2000 ограничивает путь до 260 символов общей длины. |
Ограничьте длину любого одного имени в пути. Выберите конкретный предел в соответствии с операционными системами и или файловыми системами, которые вы хотите перенести: Не беспокойтесь:: POSIX, Windows, MAC OS X. 31 символ: Классическая Mac OS 8 символов + период + 3 символа: ISO 9660 уровень 1 32 символа: ISO 9660 уровень 2 и 3 128 символов (64, если Unicode): ISO 9660 с расширениями Juliet | Ограничение длины имен может заметно снизить выразительность имен файлов, но размещение только очень высоких ограничений на длины препятствует самой широкой переносимости. |
Пересмотрено 29 Декабрь 201429 December, 2014[ORIG_END] -->
© Copyright Beman Dawes, 2002, 2003
Использование, модификация и распространение регулируются Лицензией на программное обеспечение Boost версии 1.0. (См. сопроводительный файл) LICENSE_1_0.txt или копия по адресу www.boost.org/LICENSE_1_0.txt
Статья Portability Guide раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: ::
реклама |