如何在Linux桌面上获取与文件关联的图标,MIMEtypes和应用程序?

在Linux桌面上使用C ++,获取图标,文档描述和应用程序与任意文件/文件path“关联”的最佳方式是什么?

我想使用最“规范”的方式来查找图标,MIMEtypes/文件types的描述和相关的应用程序在KDE和GNOME,我想避免任何“炮轰”的命令行和“低级别“的例程,以及避免重新发明轮子(不parsingMIMEtypes文件等)。

编辑和注释:

嘿,我最初问这个关于QT文件信息对象的问题,答案是“没有明确的答案”,似乎是正确的。 但是,这是一个这样搞砸的情况,我打开这个问题寻找更多的信息。

我不再关心QT了,我只是想通过在KDE和gnome(尤其是Gnome上的C ++ / c函数调用)findMIMEtypes的强大的方法(因为这是最令我困惑的地方) 。 我希望能够在Gnome和Konquerer / KDE上显示与Nautilus相匹配的图标和描述以及适当地打开文件等。

我想可以单独为KDE和Gnome获取它。 最大的问题是为Linux桌面获取所有这些信息的最常见/最好/最简单的方法是什么? Gnome文档特别不透明。 gnome-vsf有mime例程,但不推荐使用,我无法findGIO / GFS的mime例程,gnome-vsf的replace。 有一个含糊的暗示,应该使用开放的桌面应用程序,但使用哪一个是模糊的。 libmagic和xdg适合哪里?

指出一个总结这个问题很高兴接受的文章。 再次,我知道三线答案是“没有这样的动物”,但我正在寻找漫长的答案。

Solutions Collecting From Web of "如何在Linux桌面上获取与文件关联的图标,MIMEtypes和应用程序?"

以下是使用GLib / GIO获取所需信息的示例。

#include <gio/gio.h> #include <stdio.h> int main (int argc, char **argv) { g_thread_init (NULL); g_type_init (); if (argc < 2) return -1; GError *error; GFile *file = g_file_new_for_path (argv[1]); GFileInfo *file_info = g_file_query_info (file, "standard::*", 0, NULL, &error); const char *content_type = g_file_info_get_content_type (file_info); char *desc = g_content_type_get_description (content_type); GAppInfo *app_info = g_app_info_get_default_for_type ( content_type, FALSE); /* you'd have to use g_loadable_icon_load to get the actual icon */ GIcon *icon = g_file_info_get_icon (file_info); printf ("File: %s\nDescription: %s\nDefault Application: %s\n", argv[1], desc, g_app_info_get_executable (app_info)); return 0; } 

在Qt> 4.6中,X11系统有一个新的功能

 QIcon QIcon::fromTheme ( const QString & name, const QIcon & fallback = QIcon() ) [static] 

你可以使用这个功能。 文档在这里 / (Qt 5)

您可以使用xdg提供的工具,特别是xdg-mime query

要找出例如文件index.html的文件类型,你会

 $ xdg-mime query filetype index.html 

这将返回mimetype。 查询什么应用程序与该mimetye使用例如

 $ xdg-mime query default text/html 

这返回epiphany.desktop在这里,即$APPNAME.desktop ,所以很容易从中获取应用程序名称。 如果你只想在默认的应用程序中打开文件,你当然可以运行

 $ xdg-open index.html 

这会激起顿悟。

图标资源的查询功能似乎在xdg-utils不可用,但是您可以使用pyxdg编写一个小型的python脚本,该脚本还提供了大量的附加功能。

对于C绑定,您可能需要查看xdg页面上链接的portland代码。

编辑:

关于libmagic和朋友,你需要决定你的偏好:尽管libmagic在文件类型覆盖方面似乎更加完整(准确), 但它根本不关心默认的应用程序或图标。 它也不会为您提供安装额外mimetypes的工具。

QFileIconProvider和QFileInfo都不会对OS mime数据库做任何事情。 要访问与不同MIME类型相关的图标,您必须使用底层桌面环境的功能。 在Qt中还没有规范的方法。

考虑在Gnome,KDE和Windows中可以有不同的图标。 所以举个例子,在KDE中你会使用KMimeType 。

我刚刚找到KFileItem 。 本课程将为您提供KDE中所有图标,MIME类型和相关内容。 我相信在gnome中有一个相同的地方,但是这使得访问与QT应用程序的工作相同。

您可能需要使用系统的“/etc/mime.types”文件。 维护一个MIME类型文件的程序副本也是一个好主意。 这样,你不依赖于系统,但同时你需要保持相当详尽。 不确定图标。

也许看看这个代码: http : //ftp.devil-linux.org/pub/devel/sources/1.2/file-4.23.tar.gz

这是大多数Linux / Unix发行版上的标准文件util。 您将获得MIME类型和一些更多的信息。

我认为Gnome和KDE都有自己的方法来确定这个,也为它设置图标和标准的应用程序。

无论如何,该文件工具可能是获取MIME类型和文档描述的最佳方式。 甚至在某些情况下,甚至关于内容的一些细节。

这会让你成为mime类型的。 这是你无论如何需要知道如何打开文件。 这些是分开的步骤。 文件没有说你的图标,也没有应用程序来打开文件。