AppData/适用于所有操作系统:C++

AppData / Similar for all OS : C++?

本文关键字:操作系统 C++ 适用于 AppData      更新时间:2023-10-16

我希望为我的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上的系统注册表中,以及Mac OS X上的XML首选项文件中。在Unix系统上,在没有标准的情况下,许多应用程序(包括KDE应用程序)使用INI文本文件。

这为IMHO提供了最好的";开箱即用";经验而且它确实是独立于平台的。

一种替代方案是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本身。