AppData / Аналог для всех ОС: C ++?

Я ищу, чтобы сохранить некоторые «предпочтения» для моего приложения C ++.

В Windows я знаю, что должен использовать папку «AppData», но мне нужен эквивалент для Linux и OsX.

Есть ли какая-нибудь библиотека или переносимый способ получения такой информации в C ++?

Вот код, который я использую в настоящее время:

#ifdef VD_OS_WINDOWS
LPWSTR wszPath = NULL;
HRESULT hr = SHGetKnownFolderPath(FOLDERID_RoamingAppData, KF_FLAG_CREATE, NULL, &wszPath);

_bstr_t bstrPath(wszPath);
std::string strPath((char*)bstrPath);
CoTaskMemFree(wszPath);

return strPath;
#else
char* path = getenv("XDG_CONFIG_HOME");
if (!path)
getenv("HOME") + ".local/share";

return string(path);
#endif

Спасибо

1

Решение

Если вам случится написать Qt приложение, есть QSettings Class. Документация говорит следующее об этом классе:

Класс QSettings предоставляет постоянные независимые от платформы настройки приложения.

Пользователи обычно ожидают, что приложение запомнит свои настройки (размеры и положения окон, параметры и т. Д.) В течение сеанса. Эта информация часто хранится в системном реестре в Windows и в файлах настроек XML в Mac OS X. В системах Unix, в отсутствие стандарта, многие приложения (включая приложения KDE) используют текстовые файлы INI.

Это обеспечивает ИМХО лучший опыт «из коробки». И это действительно не зависит от платформы.

Альтернативой будет boost::program_options или же boost::property_tree, Но целью этих библиотек является обработка данных, а не хранение. Это означает, что вам все равно нужно будет обнаружить платформу и сохранить данные в правильном месте.

2

Другие решения

Исторически на Linux программа хранит свои данные конфигурации в скрытый файл или папка (одна начинается с точки .) в $HOME каталог.

Так что-то вроде:

$HOME/.my_prog_data.conf

или же

$HOME/.my_prog_data/config.conf

В более недавних усилиях по очистке $HOME каталог в настоящее время программы, как правило, используют $HOME/.config или же $HOME/.local/share скорее, чем $HOME сам.

0

По вопросам рекламы [email protected]