Я ищу, чтобы сохранить некоторые «предпочтения» для моего приложения 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
Спасибо
Если вам случится написать Qt приложение, есть QSettings Class
. Документация говорит следующее об этом классе:
Класс QSettings предоставляет постоянные независимые от платформы настройки приложения.
Пользователи обычно ожидают, что приложение запомнит свои настройки (размеры и положения окон, параметры и т. Д.) В течение сеанса. Эта информация часто хранится в системном реестре в Windows и в файлах настроек XML в Mac OS X. В системах Unix, в отсутствие стандарта, многие приложения (включая приложения KDE) используют текстовые файлы INI.
Это обеспечивает ИМХО лучший опыт «из коробки». И это действительно не зависит от платформы.
Альтернативой будет boost::program_options
или же boost::property_tree
, Но целью этих библиотек является обработка данных, а не хранение. Это означает, что вам все равно нужно будет обнаружить платформу и сохранить данные в правильном месте.
Исторически на Linux
программа хранит свои данные конфигурации в скрытый файл или папка (одна начинается с точки .
) в $HOME
каталог.
Так что-то вроде:
$HOME/.my_prog_data.conf
или же
$HOME/.my_prog_data/config.conf
В более недавних усилиях по очистке $HOME
каталог в настоящее время программы, как правило, используют $HOME/.config
или же $HOME/.local/share
скорее, чем $HOME
сам.