AppData / 所有 OS 相似:C++?

AppData / Similar for all OS : C++?

我正在为我的 C++ 应用程序存储一些 "preferences"。

在 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。文档对此 class 说了以下内容:

The QSettings class provides persistent platform-independent application settings.

Users normally expect an application to remember its settings (window sizes and positions, options, etc.) across sessions. This information is often stored in the system registry on Windows, and in XML preferences files on Mac OS X. On Unix systems, in the absence of a standard, many applications (including the KDE applications) use INI text files.

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

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

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

所以像这样:

$HOME/.my_prog_data.conf

$HOME/.my_prog_data/config.conf

在最近清理 $HOME 目录的努力中,如今程序倾向于使用 $HOME/.config$HOME/.local/share 而不是 $HOME 本身。