AppData /所有操作系统类似:C ++?

时间:2015-11-30 19:16:44

标签: c++ appdata getenv

我希望为我的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

由于

2 个答案:

答案 0 :(得分:2)

如果你碰巧写了Qt个应用,那就是 QSettings Class 。文档说明了关于这个类的以下内容:

  

QSettings类提供与平台无关的持久应用程序设置。

     

用户通常希望应用程序在会话中记住其设置(窗口大小和位置,选项等)。此信息通常存储在Windows上的系统注册表中,以及Mac OS X上的XML首选项文件中。在Unix系统上,如果没有标准,许多应用程序(包括KDE应用程序)都使用INI文本文件。

这为恕我直言提供了最好的“开箱即用”体验。它确实与平台无关。

另一种选择是boost::program_optionsboost::property_tree。但这些库的目标是数据处理,而不是存储。这意味着您仍然需要检测平台,并将数据存储在正确的位置。

答案 1 :(得分:0)

历史上,Linux程序将其配置数据存储在.目录中的隐藏文件或文件夹(以点$HOME开头)中。

类似于:

$HOME/.my_prog_data.conf

$HOME/.my_prog_data/config.conf

在最近的一项清理$HOME目录的工作中,现在程序往往使用$HOME/.config$HOME/.local/share而不是$HOME本身。