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;
}
そのために xdg から入手できるツール、特に xdg-mime query
を使用できます .
たとえばのファイルタイプを調べるにはファイル index.html
$ xdg-mime query filetype index.html
これにより、MIME タイプが返されます。その mimetye に関連付けられているアプリケーションを照会するには、例を使用します。
$ xdg-mime query default text/html
これは epiphany.desktop
を返します ここ、つまり $APPNAME.desktop
であるため、そこからアプリケーション名を簡単に取得できます。デフォルトのアプリでファイルを開きたい場合は、もちろん実行するだけです
$ xdg-open index.html
ひらめきを呼び起こすでしょう。
xdg-utils
ではアイコン リソースのクエリ関数が利用できないようです ですが、pyxdg を使用して小さな python スクリプトを作成し、多数の追加機能を提供することもできます。
C バインディングについては、おそらく xdg ページにリンクされているポートランド コードを調べる必要があります。
編集:
libmagic
について libmagic は、ファイルタイプのカバレッジに関してはより完全 (かつ正確) であるように見えますが、まったく気にしません デフォルトのアプリケーションまたはアイコンについて。また、追加の MIME タイプをインストールするためのツールも提供しません。
Qt>=4.6 では、X11 システム用の新しい機能があります
QIcon QIcon::fromTheme ( const QString & name, const QIcon & fallback = QIcon() ) [static]
この機能を使用できます。ドキュメントはこちら / (Qt 5)