2015-11-30 7 views
1

Я ищу для хранения некоторых «предпочтений» для моего приложения на C++.AppData/Похожие для всех ОС: C++?

Под окнами Я знаю, что мне нужно использовать папку «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 

Благодаря

ответ

2

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

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

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

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

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

+0

Спасибо ... мне нужна папка, в которой я могу сохранить данные! Но без QT, пожалуйста! Boost в порядке! –

+0

@ChristopheDemez boost не сделает этого для вас, к сожалению. Я не знаю ни одной другой библиотеки, кроме Qt. – user23573

0

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

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

$HOME/.my_prog_data.conf 

или

$HOME/.my_prog_data/config.conf 

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