1

我正在为我的 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

谢谢

4

2 回答 2

2

如果你碰巧写了一个Qt应用程序,有QSettings Class. 该文档对此类进行了以下说明:

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

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

这为恕我直言提供了最佳的“开箱即用”体验。而且它真的是独立于平台的。

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

于 2015-11-30T19:43:37.457 回答
0

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

所以像:

$HOME/.my_prog_data.conf

或者

$HOME/.my_prog_data/config.conf

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

于 2017-06-08T09:30:01.640 回答