Zde je příklad použití GLib/GIO k získání požadovaných informací.
#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;
}
K tomu můžete použít nástroje dostupné z xdg, zejména xdg-mime query
.
Chcete-li zjistit typ souboru např. soubor index.html
byste
$ xdg-mime query filetype index.html
Tím se vrátí mimetype. Chcete-li zjistit, která aplikace je spojena s tímto mimetye, použijte např.
$ xdg-mime query default text/html
To vrátí epiphany.desktop
zde, tj. $APPNAME.desktop
, takže je snadné z něj získat název aplikace. Pokud byste chtěli soubor otevřít ve výchozí aplikaci, můžete samozřejmě spustit
$ xdg-open index.html
což by vyvolalo zjevení.
Zdá se, že funkce dotazů na zdroje ikon nejsou v xdg-utils
dostupné , ale můžete napsat malý python skript pomocí pyxdg, který také nabízí spoustu dalších funkcí.
Pro vazby C budete pravděpodobně muset nahlédnout do portlandského kódu odkazovaného na stránce xdg.
UPRAVIT:
O libmagic
a přátelé, budete se muset rozhodnout podle svých preferencí:Zatímco libmagic se zdá být úplnější (a přesnější), pokud jde o pokrytí typů souborů, je to úplně jedno o výchozích aplikacích nebo ikonách. Také vám neposkytuje nástroje pro instalaci dalších mimetypes.
V Qt>=4.6 je nová funkce pro systémy X11
QIcon QIcon::fromTheme ( const QString & name, const QIcon & fallback = QIcon() ) [static]
Tuto funkci můžete použít. Dokumentace zde / (Qt 5)