This commit is contained in:
Andrei Astafev 2020-04-13 10:00:26 +03:00
parent 964fb48b9a
commit 8f38d1d96c

View File

@ -9,6 +9,8 @@ https://ru.wikipedia.org/wiki/FHS[FHS] («стандарт иерархии фа
назначением в файловой системе. Полная текущая версия стандарта
находится http://refspecs.linuxfoundation.org/fhs.shtml[здесь].
== Типы расположения проекта
В соответствии с данным стандартом, а также принятыми в ведущих
дистрибутивах правилами размещения исполняемых файлов в каталогах
пользователей, можно выделить следующие типы расположения:
@ -41,6 +43,8 @@ https://ru.wikipedia.org/wiki/FHS[FHS] («стандарт иерархии фа
требованиям по логическому разделению файлов на исполняемые,
заголовочные, библиотеки, файлы настроек и т.д.
== Автоматическая адаптация к текущему окружению
Для обеспечения единообразной работы вне зависимости от варианта
иерархии каталогов, в которой находится исполняемый файл, можно
выполнять автоматическую настройку на работу в текущем окружении.
@ -49,7 +53,7 @@ https://ru.wikipedia.org/wiki/FHS[FHS] («стандарт иерархии фа
класс, который анализирует расположение и окружение исполняемого
файла и предоставляет методы для получения имён каталогов,
соответствующих текущему окружению. Названия методов и описания
возвращаемых значений приведены в таблице
возвращаемых значений приведены в таблице.
[cols="2m,4",options="header",]
|===
@ -78,7 +82,33 @@ https://ru.wikipedia.org/wiki/FHS[FHS] («стандарт иерархии фа
#include <myx/filesystem/paths.hpp>
namespace MF = myx::filesystem;
MF::Paths& paths = MF::Paths::instance();
paths.init( QStringLiteral( CMLIB_PROJECT_NAME ), QStringLiteral( "conf" ) );
qDebug() << paths.systemConstDataDirectory();
MF::Paths& paths = MF::Paths::instance();
paths.init( QStringLiteral( "project_name" ), QStringLiteral( "conf" ) );
qDebug() << paths.systemConstDataDirectory().path();
----
=== Правила выбора окружения
Класс `myx::filesystem::Paths` реализован в виде синглтона,
чтобы повторно не выполнять проверку окружения в разных частях программы.
Сначала определяются имена пользовательского и временного каталогов с
помощью вызовов функций https://doc.qt.io/qt-5/qdir.html#homePath[`QDir::homePath`]
и https://doc.qt.io/qt-5/qdir.html#tempPath[`QDir::tempPath`], затем
имена пользовательских каталогов для настроек, постоянных и изменяемых
данных и журналов. Эти значения не зависят от расположения исполняемого,
а определяются согласно значениям переменных окружения, либо значениям
принятыми в стандартах. Пример имён каталогов для пользователя `user`
и проекта `project` приведён в таблице.
[cols="3,4m,3m",options="header",]
|===
| Назначение каталога | Метод | Значение
| Домашний каталог | homeDirectory() | /home/user
| Временные файлы | tempDirectory() | /tmp
| Файлы настройки | userConfigDirectory() | /home/user/.config/project
| Неизменяемые файлы | userConstDataDirectory() | /home/user/.local/share/project/data
| Изменяемые файлы | userVarDataDirectory() | /home/user/.local/share/project/lib
| Журналы работы | userLogDirectory() | /home/user/.local/share/project/log
|===