Можно ли разъяснить то, что Вы подразумеваете под "LINQ"?
LINQ не является технологией доступа к данным, это - просто функция языка, которая поддерживает запросы как собственную конструкцию. Это может запросить любую объектную модель, которая поддерживает определенные интерфейсы (например, IQueryable).
Многие люди обращаются к LINQ К SQL как LINQ, но это нисколько не корректно. Microsoft только что выпустила LINQ К Объектам с.NET 3,5 SP1. Кроме того, NHibernate имеет интерфейс LINQ, таким образом, Вы могли использовать LINQ и NHibernate для достигания данных.
Вот пример использования 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;
}
Ни QFileIconProvider, ни QFileInfo ничего не сделают с базой данных mime ОС. Чтобы получить доступ к значкам, связанным с различными типами MIME, вам придется использовать функции базовой среды рабочего стола. В Qt нет (пока) канонического способа.
Учтите, что у вас может быть другой значок в Gnome, в KDE и в Windows. Так, например, в KDE вы должны использовать KMimeType .
Вы можете использовать системный файл "/etc/mime.types". Также неплохо поддерживать копию вашей программы файла типа MIME. Таким образом, вы не зависите от системы, но в то же время вам нужно сделать ее достаточно исчерпывающей. Не уверен насчет иконок.
Я только что нашел KFileItem . Этот класс дает вам все, что вам нужно для значков, типов пантомимы и связанных вещей в KDE. Я уверен, что в gnome есть эквивалент, но он дает доступ на том же уровне, что и приложение QT.
Может быть, посмотрите на этот код: http://ftp.devil-linux.org/pub/devel/sources/1.2/file-4.23.tar.gz
Это стандартный файл UTIL, обнаруженный на большинстве распределений Linux / Unix. Вы получите тип MIME и дополнительную информацию.
Я думаю, что оба GNOME, так и KDE имеют свои собственные способы определить это, а также установить значок и стандартное приложение для него.
В любом случае, этот файл-инструмент, вероятно, лучший способ получить тип MIME и описание документа. И в некоторых случаях даже некоторые детали о содержании.
Это получит вам тип MIME. Это то, что вам нужно, чтобы знать, как вы можете открыть файл. Это отложенные шаги. Файл не говорит вам о значке, ни приложении, чтобы открыть файл с.
Для этого можно использовать инструменты, доступные на xdg , в частности xdg-mime query
.
Чтобы узнать тип файла, например файл index.html
вы должны
$ xdg-mime query filetype index.html
Это вернет mimetype. Чтобы узнать, какое приложение связано с этим mimetye, используйте, например,
$ xdg-mime query default text/html
Здесь возвращается epiphany.desktop
, то есть $ APPNAME.desktop
, поэтому по нему легко получить имя приложения. Если вы просто хотите открыть файл в приложении по умолчанию, вы, конечно, можете просто запустить
$ xdg-open index.html
, что вызовет прозрение.
Функции запроса для ресурсов значков, похоже, недоступны в xdg-utils
, но вы можете написать небольшой скрипт на Python, используя pyxdg , который также предлагает массу дополнительных функций.
Для привязок C вам, вероятно, потребуется ознакомиться с кодом портленда , ссылка на который есть на странице xdg .
РЕДАКТИРОВАТЬ:
Что касается libmagic
и друзей, вам нужно будет определиться со своими предпочтениями: хотя libmagic кажется более полным (и точным) с точки зрения охвата типов файлов, это совершенно не заботится о приложениях или значках по умолчанию. Он также не предоставляет вам инструментов для установки дополнительных mimetype.