2010-03-30 15 views
12

¿Hay alguna manera de obtener el tipo MIME de un archivo usando alguna llamada al sistema en Windows? Estoy escribiendo una extensión de IIS en C++, por lo que debe ser invocable desde C++, y tengo acceso a IIS si hay alguna funcionalidad expuesta. Obviamente, IIS debe poder hacer esto, pero mi Google no ha podido averiguar cómo. Encontré this .NET pregunta relacionada aquí en SO, pero eso no me da mucha esperanza (ya que ni una buena solución ni una solución de C++ se menciona allí).Encontrar un tipo MIME para un archivo en Windows

Lo necesito para que pueda servir archivos dinámicos utilizando el tipo de contenido apropiado de mi aplicación. Mi plan es consultar primero una lista de tipos MIME dentro de mi aplicación, luego volver al listado de tipos MIME del sistema (sin embargo, eso funciona, obviamente existe ya que es la forma de asociar los archivos con los programas). Solo tengo una extensión de archivo para trabajar en algunos casos, pero en otros casos puedo tener un archivo real en el disco para examinar. Como estos archivos no serán cargados por el usuario, creo que puedo confiar en la extensión y preferiría una solución de búsqueda solo de extensión ya que parece más simple y más rápida. ¡Gracias!

+0

Su suposición es incorrecta: en Windows, la asociación entre extensiones y programas no utiliza los tipos MIME. En el registro, cada extensión está asociada a una entrada descriptiva, y tiene un valor '\ Shell \ Open \ Command \'. Esta direccionamiento indirecto permite que dos extensiones compartan una entrada descriptiva, p. '.jpeg' y' .jpg' comparten la entrada descriptiva 'jpegfile' – MSalters

+0

MSalters, podría jurar que en XP, el diálogo de asociación de archivos tenía un lugar en él para el tipo MIME ... pero aquí en Win Server 2k8, en el El cuadro de diálogo "Programas predeterminados", parece ser exactamente como usted dice ... eso no me sirve :( – rmeador

Respuesta

13

HKCR\\.<ext>\Content Type (donde "ext" es la extensión de archivo) normalmente contendrá el tipo MIME.

+0

A diferencia de la solución de Avitus, esto es compatible tanto con .jpg como con .jpeg – MSalters

0

pegado desde 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; 
} 
Cuestiones relacionadas