SHGetKnownFolderPath等效于Linux中的API
SHGetKnownFolderPath equivalent API in Linux
我正在将一些功能从windows移植到linux,我发现在linux中很难匹配SHGetKnownFolderPath的功能。实际上,glib中有一个API,它提供了这一部分,但我不想在这里使用这个库。链接还通过在.bashrc中导出变量来实现这一点,但我喜欢linux API这样做。
这里还解释了如何访问xdg用户目录。还有别的办法吗?否则我会坚持下去的。请阐明这一点。
Linux桌面的状态一团糟,尤其是对于这类东西。有一些FreeDesktop标准,但在一致性和向后兼容性方面,没有什么能接近Windows Shell API。
话虽如此,根据我的经验,最安全的做法是依赖XDG的实用程序,特别是在您的情况下的xdg-user-dir
(XDG-utils在其他情况下也可以派上用场);如今,它们几乎是普遍安装的,而且它们通常做"正确"的事情。此外,许多包都依赖于它们,因此任何DE都可能至少在它们上测试集成(IOW:如果有人编写的配置破坏了xdg-utils,他们很可能会修复它;如果它是不符合规范的垃圾,恰好与xdg-util斯一起使用,他们可能不会注意到)。
请不要试图在这种事情上表现得太聪明。Firefox试图巧妙地处理Linux上的文件关联,10年来,点击其中的"打开文件夹"会打开随机应用程序(记录在案,在我的盒子里,它非常喜欢打开Gwenwiew;过去它更喜欢FileLight)。
可以从名为home的环境变量中检索的主目录。您可以使用getenv()
获取此内容。在您的主目录中,没有那么多标准化的目录。你的桌面上有Gnome、KDE和朋友使用的Desktop
。不同的应用程序和应用程序最终会出现在以单个.
为前缀的目录中,这使得目录内容的默认列表在大多数应用程序中都会隐藏它们,例如.ssh
和.mc
。
这是我最后一次尝试。。。gcc 9.3~
#include <cstdlib>
#include <filesystem>
std::filesystem::path get_user_profile_path() {
std::cout << "getting linux user profile path...n";
const char* p = getenv("HOME");
std::filesystem::path result = p;
return result;
}
- 如何使用 AWS Transcribe C++ API 中的'StartTranscriptionJobRequest'?
- 第三方 API 中的编译错误 - Visual Studio
- numpy C API 中的import_array如何工作?
- cpp / c ++中的grpc客户端代码,元数据x-api-key/x-goog-api-key不起作用,给了我语音A
- 将uint8_t*buffer和size_tbufferlen从C++传递到C中的API函数的最佳方式是什么
- 现代C++中STL API的差异(当我在VS2017中将目标从x64切换到x86时)
- 用于从可能不存在的容器中检索对象的 API 设计
- 使用宏替换工厂模式样式 API 中的"create()"函数
- 如何使用 Win32 API 从 Excel VBA 中的非"Single-Threaded Apartment"线程调用 InternetGetProxyInfo
- 更改 ICDBurn 窗口 API 中的默认刻录驱动器
- 父进程中的挂钩 api 调用
- 如何通过键和值以及在C 中的结果映射中比较两个地图?我们有任何STL API吗?
- Windows 应用程序中的谷歌地图 API
- Opencl C API包装器中的clfinish等效是什么
- 检查任务栏中的当前应用程序吗?(C ,Windows API)
- 如何防止 C API 注册表中的 Lua 回调被垃圾回收?
- mmdevice API中的cocreateinstance返回错误代码0x800401f0
- C++ 标头文件LNK2019中的 API 实现
- SHGetKnownFolderPath等效于Linux中的API
- 当使用时从外部隐藏类仅用于C++中的API内部