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

2024-02-15

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

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

编辑和注释:

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

我不再特别关心 QT,我只是在寻找most通过 KDE 和 gnome 上的 C++/c 函数调用查找 mime 类型的规范方法(尤其是 Gnome,因为这是最让我困惑的地方)。我希望能够在 Gnome 和 Konquerer/KDE 上显示与 Nautilus 匹配的图标和描述,以及正确打开文件等。

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

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


下面是使用 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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