繁体   English   中英

Linux 中的 SHGetKnownFolderPath 等效 API

[英]SHGetKnownFolderPath equivalent API in Linux

我正在将一些功能从 windows 移植到 linux,我发现在 linux 中匹配 SHGetKnownFolderPath 的功能更难。 实际上,glib 中有一个 API 来处理这部分,但我不想在这里使用那个库。 链接还通过在 .bashrc 中导出变量来实现这一点,但我喜欢这样做的 linux API。

这里也解释了如何访问 xdg-user-dir。 有没有其他方法可以做到这一点,否则我会坚持这一点。请对此有所了解。

Linux桌面的状态令人一团糟,尤其是对于这种东西。 有一些FreeDesktop标准,但与Windows Shell API的一致性和对向后兼容性的承诺不相上下。

话虽如此,以我的经验,最安全的方法是依赖XDG的实用程序,尤其是xdg-user-dir (在其他情况下, xdg utils可能会派上用场); 如今,它们几乎已被普遍安装,并且通常做“正确的”事情。 而且,许多软件包都依赖它们,因此任何DE都可能至少对它们进行集成测试(IOW:如果有人编写的配置使xdg utils收支平衡,则很可能他们会对其进行修复;如果发生超出规范的垃圾的情况,就会发生这种情况)与xdg实用程序一起使用,他们可能不会注意到)。

请不要尝试对这种东西太机灵。 Firefox试图与Linux上的文件关联变得更聪明,单击它中的“打开文件夹”会打开随机应用程序已有10年了(据记录,在我的盒子里,它非常喜欢打开Gwenview;过去它更喜欢FileLight)。

您可以从名为HOME的环境变量中检索主目录。 您可以使用getenv()获取。 在您的主目录中,没有太多标准化目录。 你有Desktop为你有你的桌面上有什么使用GNOME,KDE和朋友。 不同的应用程序和应用程序最终都以一个前缀为目录的目录结束. ,使目录内容的默认列表在大多数应用程序(例如.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;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM