【问题标题】:AppData / Similar for all OS : C++?适用于所有操作系统的 AppData / 类似:C++?
【发布时间】:2015-11-30 19:16:43
【问题描述】:

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

谢谢

【问题讨论】:

    标签: c++ appdata getenv


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢...我需要的是可以保存数据的“文件夹”!但请没有QT!升压很好!
    • 不幸的是,@ChristopheDemez boost 不会为您做到这一点。我不知道除了 Qt 之外的任何其他库。
    【解决方案2】:

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

    比如:

    $HOME/.my_prog_data.conf
    

    $HOME/.my_prog_data/config.conf
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 2013-05-02
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多