SHGetKnownFolderPath等效于Linux中的API

SHGetKnownFolderPath equivalent API in Linux

本文关键字:中的 API Linux SHGetKnownFolderPath      更新时间:2023-10-16

我正在将一些功能从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;
}