我希望为我的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
由于
答案 0 :(得分:2)
如果你碰巧写了Qt个应用,那就是 QSettings Class
。文档说明了关于这个类的以下内容:
QSettings类提供与平台无关的持久应用程序设置。
用户通常希望应用程序在会话中记住其设置(窗口大小和位置,选项等)。此信息通常存储在Windows上的系统注册表中,以及Mac OS X上的XML首选项文件中。在Unix系统上,如果没有标准,许多应用程序(包括KDE应用程序)都使用INI文本文件。
这为恕我直言提供了最好的“开箱即用”体验。它确实与平台无关。
另一种选择是boost::program_options
或boost::property_tree
。但这些库的目标是数据处理,而不是存储。这意味着您仍然需要检测平台,并将数据存储在正确的位置。
答案 1 :(得分:0)
历史上,Linux
程序将其配置数据存储在.
目录中的隐藏文件或文件夹(以点$HOME
开头)中。
类似于:
$HOME/.my_prog_data.conf
或
$HOME/.my_prog_data/config.conf
在最近的一项清理$HOME
目录的工作中,现在程序往往使用$HOME/.config
或$HOME/.local/share
而不是$HOME
本身。