Поиск типа MIME для файла в Windows - PullRequest
12 голосов
/ 31 марта 2010

Есть ли способ получить MIME-тип файла, используя какой-то системный вызов в Windows? Я пишу расширение IIS в C ++, поэтому оно должно вызываться из C ++, и у меня есть доступ к IIS, если есть какие-то функциональные возможности. Очевидно, что сам IIS должен быть в состоянии сделать это, но мой поиск в Google не смог выяснить, как. Я нашел этот .net связанный вопрос здесь на SO, но это не дает мне большой надежды (поскольку там не упоминается ни хорошее решение, ни решение C ++).

Мне это нужно, чтобы я мог обслуживать динамические файлы, используя соответствующий тип контента из моего приложения. Мой план состоит в том, чтобы сначала просмотреть список типов MIME в моем приложении, а затем вернуться к системному списку типов MIME (однако это работает; очевидно, он существует, поскольку именно так вы ассоциируете файлы с программами). В некоторых случаях у меня есть только расширение файла, но в других случаях у меня может быть реальный файл на диске для проверки. Поскольку это не будут загруженные пользователем файлы, я верю, что могу доверять расширению, и я бы предпочел решение поиска только по расширению, поскольку оно кажется более простым и быстрым. Спасибо!

Ответы [ 3 ]

13 голосов
/ 31 марта 2010

HKCR\\.<ext>\Content Type (где "ext" - расширение файла) обычно содержит тип MIME.

0 голосов
/ 15 ноября 2018

В Windows 10 различные типы MIME хранятся в реестре по адресу:

HKEY_CLASSES_ROOT\MIME\Database\Content Type

с ключом для каждого типа контента (например, text/plain) под этим ключом.

0 голосов
/ 07 марта 2014

Вставлено с http://www.snoyman.com/blog/2012/03/ie-mimetype-png.html:

#include <urlmon.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
    char buff[256];
    LPWSTR out;

    FILE *in = fopen("title.png", "rb");

    fread(buff, 1, 256, in);

    FindMimeFromData(NULL, NULL, buff, 256, NULL, FMFD_DEFAULT, &out, 0);

    printf("%ls\n", out);

    return 0;
}
...