AppData/适用于所有操作系统:C++
AppData / Similar for all OS : C++?
我希望为我的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_options
或boost::property_tree
。但这些库的目的是数据处理,而不是存储。这意味着您仍然需要检测平台,并将数据存储在正确的位置。
从历史上看,在Linux
上,程序将其配置数据存储在$HOME
目录中的隐藏文件或文件夹(以点.
开头)中。
所以类似于:
$HOME/.my_prog_data.conf
或
$HOME/.my_prog_data/config.conf
在最近清理$HOME
目录的努力中,现在的程序倾向于使用$HOME/.config
或$HOME/.local/share
,而不是$HOME
本身。
相关文章:
- 在C++中设置基于操作系统的文件路径
- 如何在工厂方法中返回指向基于基础操作系统的派生类的有效指针
- WideCharToMultiByte在英语操作系统上不转换日语
- 如何在 Windows 操作系统中在 geany 中安装插件
- 操作系统平台支持宏和提升库
- 从utsname找出Linux操作系统名称
- 为什么 free() 函数不将内存返回给操作系统?
- 我可以让编译器忽略特定于操作系统的方法吗?
- 有没有办法获取用户操作系统的ANSI转义码?
- 测试操作系统时执行程序集"sti"时虚拟框崩溃
- 如何应用 printers.py 修改?(Linux操作系统)
- LINUX 操作系统上的错误:令牌之前预期的构造函数、析构函数或类型转换'('?
- 当PSO细粒度策略对使用AdsGetObject MSDN API的Windows操作系统生效时,如何获取用户密码到期日
- 操作系统如何检测进程崩溃
- 检查操作系统兼容性
- 操作系统 (Linux) 在使用 boost::asio::generic::raw_protocol::socket
- 检测到由于操作系统内存不足而导致子进程终止
- 在Windows 10操作系统中扩展控制台
- 如何从支持linux/mac操作系统的第三方代码为我的c#项目创建dll
- 读取USB与操作系统、C++之间传输的数据