Hier ist ein Beispiel für die Verwendung von GLib/GIO, um die gewünschten Informationen zu erhalten.
#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;
}
Sie können dafür die von xdg verfügbaren Tools verwenden, insbesondere xdg-mime query
.
Um den Dateityp von z.B. eine Datei index.html
du würdest
$ xdg-mime query filetype index.html
Dies gibt den Mimetyp zurück. Um abzufragen, welche Anwendung mit diesem Mimetye verknüpft ist, verwenden Sie z. B.
$ xdg-mime query default text/html
Dies gibt epiphany.desktop
zurück hier, also $APPNAME.desktop
, daher ist es einfach, den Anwendungsnamen daraus abzurufen. Wenn Sie die Datei nur in der Standard-App öffnen möchten, können Sie sie natürlich auch einfach ausführen
$ xdg-open index.html
was Epiphanie auslösen würde.
Abfragefunktionen für Icon-Ressourcen scheinen in xdg-utils
nicht verfügbar zu sein , aber Sie könnten mit pyxdg ein kleines Python-Skript schreiben, das auch jede Menge zusätzlicher Funktionen bietet.
Für C-Bindungen müssen Sie sich wahrscheinlich den Portland-Code ansehen, der auf der xdg-Seite verlinkt ist.
BEARBEITEN:
Zu libmagic
und Freunde, Sie müssen sich für Ihre Präferenzen entscheiden:Während libmagic in Bezug auf die Abdeckung von Dateitypen vollständiger (und genauer) zu sein scheint, kümmert es sich überhaupt nicht darum Informationen zu Standardanwendungen oder Symbolen. Es stellt Ihnen auch keine Tools zur Verfügung, um zusätzliche Mimetypen zu installieren.
In Qt>=4.6 gibt es eine neue Funktion für X11-Systeme
QIcon QIcon::fromTheme ( const QString & name, const QIcon & fallback = QIcon() ) [static]
Sie können diese Funktion verwenden. Dokumentation hier / (Qt 5)