2010-03-30 14 views
12

Czy istnieje sposób na uzyskanie typu MIME pliku za pomocą wywołania systemowego w systemie Windows? Piszę rozszerzenie IIS w C++, więc musi być ono wywoływalne z C++, i mam dostęp do IIS, jeśli jest wyeksponowana jakaś funkcjonalność. Oczywiście, sam IIS musi być w stanie to zrobić, ale moje googlowanie nie było w stanie dowiedzieć się, jak to zrobić. Znalazłem tutaj pytanie związane z this .net na SO, ale to nie daje mi wiele nadziei (ponieważ ani dobre rozwiązanie, ani rozwiązanie C++ nie jest tam wspomniane).Znajdowanie typu MIME dla pliku w systemie Windows

Potrzebuję go, by móc wyświetlać dynamiczne pliki przy użyciu odpowiedniego typu zawartości z mojej aplikacji. Moim planem jest najpierw zapoznać się z listą typów MIME w mojej aplikacji, a następnie wrócić do listy typów MIME systemu (działa to jednak, oczywiście, że istnieje, ponieważ wiąże się to z kojarzeniem plików z programami). W niektórych przypadkach mam tylko rozszerzenie pliku, ale w innych przypadkach mogę mieć do sprawdzenia rzeczywisty plik na dysku. Ponieważ nie są to pliki przesłane przez użytkownika, wierzę, że mogę zaufać rozszerzeniu i wolę rozwiązanie wyszukiwania tylko dla rozszerzeń, ponieważ wydaje się prostsze i szybsze. Dzięki!

+0

Twoje założenie jest błędne: w systemie Windows, stowarzyszenie między rozszerzeniami i programów nie korzysta z typów MIME. W rejestrze każde rozszerzenie jest powiązane z opisem opisowym i ma wartość '\ Shell \ Open \ Command \'. To ograniczenie pozwala dwóm rozszerzeniom współużytkować jeden opisowy wpis, np. '.jpeg' i' .jpg' dzielą opisowy wpis 'jpegfile' – MSalters

+0

MSalters, mógłbym przysiąc, że w XP, okno dialogowe skojarzeń plików miało miejsce w nim dla typu MIME ... ale tutaj na Win Server 2k8, w Okno dialogowe "Domyślne programy" wydaje się być takie, jak mówisz ... to mi się nie przydaje :( – rmeador

Odpowiedz

13

HKCR\\.<ext>\Content Type (gdzie "ext" to rozszerzenie pliku) zazwyczaj będzie zawierać typ MIME.

+0

W przeciwieństwie do rozwiązania Avitus, obsługuje ono zarówno .jpg, jak i .jpeg – MSalters

0

wklejony z 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; 
} 
Powiązane problemy