2010-03-30 10 views
12

C'è un modo per ottenere il tipo MIME di un file utilizzando alcune chiamate di sistema su Windows? Sto scrivendo un'estensione IIS in C++, quindi deve essere richiamabile da C++, e ho accesso a IIS se c'è qualche funzionalità esposta. Ovviamente, IIS deve essere in grado di farlo, ma il mio googling non è stato in grado di scoprire come. Ho trovato la domanda relativa this .net qui su SO, ma questo non mi dà molte speranze (in quanto né una buona soluzione né una soluzione C++ sono menzionate lì).Ricerca di un tipo MIME per un file su Windows

Ne ho bisogno in modo che possa servire file dinamici utilizzando il tipo di contenuto appropriato dalla mia app. Il mio piano è di consultare prima un elenco di tipi MIME all'interno della mia app, quindi tornare all'elenco del tipo MIME del sistema (tuttavia funziona, ovviamente esiste perché è come associ i file ai programmi). In alcuni casi ho solo un'estensione di file con cui lavorare, ma in altri casi potrei avere un vero file su disco da esaminare. Dal momento che questi file non saranno caricati dall'utente, credo di potermi fidare dell'estensione e preferirei una soluzione di ricerca solo per l'estensione poiché sembra più semplice e veloce. Grazie!

+0

La tua ipotesi è corretta: su Windows, l'associazione tra le estensioni e programmi non fa uso di tipi MIME. Nel registro, ogni estensione è associata a una voce descrittiva e ha un valore '\ Shell \ Open \ Command \'. Questo riferimento indiretto consente a due estensioni di condividere una voce descrittiva, ad es. '.jpeg' e' .jpg' condividono la voce descrittiva 'jpegfile' – MSalters

+0

MSalters, potrei giurare che in XP, la finestra di dialogo di associazione file avesse un posto in esso per il tipo MIME ... ma qui su Win Server 2k8, nel La finestra di dialogo "Programmi predefiniti" sembra essere proprio come dici tu ... non mi è utile :( – rmeador

risposta

13

HKCR\\.<ext>\Content Type (dove "ext" è l'estensione del file) manterrà normalmente il tipo MIME.

+0

A differenza della soluzione Avitus, supporta sia jpg che .jpeg – MSalters

0

incollato da 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; 
} 
Problemi correlati