如何在Linux桌面中获取与文件关联的图标,MIME类型和应用程序?

Joe*_*ger 23 c++ linux mime kde gnome

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

我想使用最"规范"的方式在KDE和gnome上找到图标,mime类型/文件类型描述和相关应用程序,我想避免任何"炮轰"到命令行和"低" -level"例程以及避免自己重新发明轮子(没有解析mime-types文件等).

编辑和备注:

嘿,我最初问过关于QT文件信息对象的这个问题,答案"没有明确答案"似乎是正确的.但这是一个搞砸的情况,我正在提出寻找更多信息的问题.

我不再关心QT了,我只是在寻找通过KDE和gnome上的C++/c函数调用来找到mime类型的经典的方法(特别是Gnome,因为这是我最困惑的地方) .我希望能够在Gnome和Konquerer/KDE中显示与Nautilus相匹配的图标和描述,以及适当地打开文件等.

我想我可以单独为KDE和Gnome获取它.最大的问题是获取Linux桌面所有这些信息的最常见/最佳/最佳方法是什么?Gnome文档特别不透明.gnome-vsf有mime例程,但它已被弃用,我找不到GIO/GFS的mime例程,gnome-vsf的替换.有一个模糊的暗示,人们应该使用开放的桌面应用程序,但使用哪一个是模糊的.libmagic和xdg在哪里适合?

指向总结问题的文章的指针很乐意接受.同样,我知道三大行的答案是"没有这样的动物",但我找了很长的答案.

Tra*_*ins 12

以下是使用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;
}
Run Code Online (Sandbox Code Playgroud)