一尘不染

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

linux

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

我想使用最“规范”的方式在KDE和gnome上查找图标,mime类型/文件类型的描述以及相关的应用程序,我想 避免对命令行的任何“脱壳”
和“低级”例程,以及避免自己重新发明轮子(无需解析mime-types文件等)。

编辑和注释:

嘿,我最初是问有关QT文件信息对象的问题,并且就目前而言,“没有明确答案”的答案似乎是正确的。但是,这种情况太糟了,我在打开问题以寻求更多信息。

我不再特别在意QT,我只是在寻找一种 规范的方法,通过在KDE和gnome上通过C ++ /
c函数调用来找到mime类型(尤其是Gnome,因为这是我最困惑的地方) 。我希望能够显示与Gnome和Konquerer
/中的Nautilus相匹配的图标和描述,以及与KDE有关的任何内容,以及适当地打开文件等。

我想我可以分别为KDE和Gnome获得它。最大的问题是,为Linux桌面获取所有这些信息的最常见/最佳/规范的方法是什么?侏儒文档尤其不透明。gnome-
vsf有mime例程,但已弃用,我找不到gnome-vsf的替代品GIO /
GFS的mime例程。有一个模糊的含义是,一个人应该使用开放的桌面应用程序,但是不清楚地使用哪个。libmagic和xdg放在哪里?

指向总结这些问题的论文的指针很高兴被接受。同样,我知道三行答案是“没有这样的动物”,但我正在寻找 答案。


阅读 485

收藏
2020-06-03

共1个答案

一尘不染

这是一个使用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;
}
2020-06-03