Библиотека FatFS: Path Names, система именования файлов и директорий |
Добавил(а) microsin | |||||||||||||||||||||||||||||||||||||||
Имена путей (Path Names), формат имен путей Формат имени пути в модуле FatFs используется такие же, как и в спецификации имен DOS/Windos, и выглядят так: "[drive#:][/]directory/file" Модуль FatFs поддерживает длинные имена (LFN) и короткие имена формата 8.3 (SFN). LFN можно использовать, когда опция LFN включена (_USE_LFN > 0). Поддиректории разделяются символом-разделителем \ или / точно так же, как в API DOS/Windows. Задублированные разделители пропускаются и игнорируются. Различие только в том, что логический диск указывается в числовом виде, вместе с двоеточием. Когда номер диска пропущен, то подразумевается, что используется диск по умолчанию (0 или текущий диск). Управляющие символы (от \0 до \x1F) распознаются как конец имени пути. Начальные/внутренние пробелы в имени пути допустимы в разрешенной конфигурации LFN, но они распознаются как окончание имени пути в конфигурации не-LFN. Завершающие пробелы и точки игнорируются. В конфигурации по умолчанию (_FS_RPATH == 0) нет такого понятия, как текущая директория, как принято в операционных системах. Все объекты на томе указываются через полный путь, который начинается с корневой (root) директории. Имена директорий в виде точек (“.”, “..”) недопустимы. Начальный разделитель игнорируется, и может быть опущен, а может и присутствовать. Номер диска по умолчанию фиксирован и равен 0. Когда относительные имена путей разрешены(_FS_RPATH == 1), указанные пути начинаются с корневой (root) директории, если имени пути имеется начальный разделитель (в первом символе стоит ‘/’ или ‘\’). Если в первом символе пути разделителя нет, то путь начинается не от корневой, а от текущей директории, которая устанавливается вызовом функции f_chdir. Имена директорий в виде точек также допустимы в составе имени пути. Диском по умолчанию является текущий диск, который установлен вызовом функции f_chdrive. В таблице приведены примеры, как трактуется имя пути в зависимости от режима, установленного макросом _FS_RPATH.
Unicode API Имена путей на входе и выходе могут задаваться либо в кодировке ANSI/OEM (SBCS/DBCS), либо в кодировке Unicode, в зависимости от опций конфигурации. Тип аргументов, которые указывают имя файла, заданы как тип TCHAR, который в конфигурации по умолчанию является псевдонимом char. Кодировка строки имени файла является кодировкой ANSI/OEM, указанной макросом _CODE_PAGE. Когда макрос _LFN_UNICODE установлен в 1 (в режиме LFN), тип TCHAR переключается на unsigned short (символ UCS-2), который поддерживает Unicode. В этом случае опция LFN полностью поддерживается и символы, специфичные для Unicode, как ?????, могут также использоваться в составе имени пути. Эта установка также влияет на типы данных и кодирование строк в функциях ввода/вывода строк. Для определения литеральных строк имеются макросы _T(s) и _TEXT(s), которые нужны для автоматического выбора кодировки ANSI/OEM или Unicode. Код ниже показывает примеры указания литеральных строк. f_open(fp, "filename.txt", FA_READ); /* только ANSI/OEM */ f_open(fp, L"filename.txt", FA_READ); /* только Unicode */ f_open(fp, _T("filename.txt"), FA_READ); /* меняется автоматически */ Соответствие между логическими и физическими дисками Модуль FatFs имеет рабочие области, которые называются file system object для каждого тома (логического диска). По умолчанию каждый логический диск привязан к физическому, который имеет тот же самый номер диска. В результате делается попытка примонтировать том в формате SFD на первом разделе FDISK. Когда в конфигурации включена установка _MULTI_PARTITION >= 1, то каждый отдельный логический диск привязан к любому физическому диску/разделу. В этом случае таблица управления томами должна быть задана пользователем. Она должна использоваться, чтобы отследить взаимосвязь между логическими дисками и разделами следующим образом. /* Пример: Логический диск 0-2 назначен на три primary раздела на физическом драйве 0 (неизвлекаемый диск).При использовании конфигурации _MULTI_PARTITION нужно принять во внимание некоторые соображения:
[Ссылки] 1. Path Names (оригинал статьи на английском языке). |