2014-02-03 3 views
4

Я пытаюсь получить Mime-тип из расширения, например .html должен вернуть text/html. Я знаю, как получить Mime с доступным файлом, но не другим способом. Есть ли способ запросить mime из расширения, по крайней мере, известных?Получить тип Mime из расширения файла

ответ

4

вам нужно использовать GContentType внутри ПИБ:

https://developer.gnome.org/gio/stable/gio-GContentType.html

и быть точным g_content_type_guess():

https://developer.gnome.org/gio/stable/gio-GContentType.html#g-content-type-guess

который принимает либо имя файла, либо его содержимое файла, и возвращает предполагаемый тип контента; оттуда вы можете использовать g_content_type_get_mime_type(), чтобы получить тип MIME для типа контента.

это пример того, как использовать g_content_type_guess():

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include <gio/gio.h> 

int 
main (int argc, char *argv[]) 
{ 
    const char *file_name = "test.html"; 
    gboolean is_certain = FALSE; 

    char *content_type = g_content_type_guess (file_name, NULL, 0, &is_certain); 

    if (content_type != NULL) 
    { 
     char *mime_type = g_content_type_get_mime_type (content_type); 

     g_print ("Content type for file '%s': %s (certain: %s)\n" 
       "MIME type for content type: %s\n", 
       file_name, 
       content_type, 
       is_certain ? "yes" : "no", 
       mime_type); 

     g_free (mime_type); 
    } 

    g_free (content_type); 

    return EXIT_SUCCESS; 
} 

однажды скомпилирован, выход на Linux является:

Content type for file 'test.html': text/html (certain: no) 
MIME type for content type: text/html 

объяснение: на Linux, тип контента, тип MIME ; это неверно на других платформах, поэтому вы должны преобразовать строки GContentType в тип MIME.

также, как вы можете видеть, только с помощью расширения будет установлено значение boolean не определено флаг, поскольку само расширение недостаточно для определения точного типа содержимого.

+0

который потребует, чтобы файл был справа? Я знаю, что прошу не так часто, но я хотел знать типы mime для известных типов файлов. Я мог бы анализировать /etc/mime.types, но я предпочел бы использовать библиотеку, которая делает это. Спасибо за отличный пример. –

+0

нет, он не требует наличия файла: вам просто нужно его имя. Кроме того, /etc/mime.types совершенно бессмысленна для любого современного Linux: вам нужна база данных shared-mime-info, которая является частью freedesktop.org: http://freedesktop.org/wiki/Software/shared-mime- info/ – ebassi

+0

, поэтому я могу поместить любое фиктивное имя, например dummy.html? Это то что мне нужно. Я соглашусь это сейчас! –

Смежные вопросы