12
votes

Trouver un type MIME pour un fichier sous Windows

Y a-t-il un moyen d'obtenir le type MIME d'un fichier en utilisant un appel système sous Windows? J'écris une extension IIS en C ++. Il doit donc être appelable de C ++ et j'ai accès à IIS s'il existe certaines fonctionnalités exposées. De toute évidence, IIS elle-même doit pouvoir faire cela, mais mon googling n'a pas été en mesure de savoir comment. J'ai trouvé Cette .NET QUESTION CONNE-NOUVEAU ON, mais ça ne me donne pas beaucoup d'espoir (comme ni une bonne solution ni une solution C ++ n'est mentionnée).

J'en ai besoin pour que je puisse servir des fichiers dynamiques en utilisant le type de contenu approprié de mon application. Mon plan consiste à consulter d'abord une liste de types MIME au sein de mon application, puis retombez à la liste Type MIME du système (Toutefois, cela fonctionne; évidemment, il existe depuis que vous associez des fichiers avec des programmes). Je n'ai qu'une extension de fichier pour travailler dans certains cas, mais dans d'autres cas, je pourrais avoir un fichier sur disque réel à examiner. Comme ils ne seront pas des fichiers téléchargés par l'utilisateur, je pense que je peux faire confiance à l'extension et que je préférerais une solution de recherche d'extension, car il semble plus simple et plus rapide. Merci!


2 commentaires

Votre hypothèse est incorrecte: sous Windows, l'association entre extensions et programmes n'utilise pas de types MIME. Dans le registre, chaque extension est associée à une entrée descriptive et qui comporte une valeur \ shell \ ouverte \ valeur. Cette indirection permet à deux extensions de partager une entrée descriptive, par ex. .jpeg et .jpg Partagez l'entrée descriptive jpegfile


Msalters, je pourrais jurer que dans XP, la boîte de dialogue de l'association de fichiers avait une place dedans pour le type MIME ... mais ici sur Win Server 2K8, dans la boîte de dialogue "Programmes par défaut", il semble être tout comme vous dites ... ce n'est pas utile pour moi :(


3 Réponses :


15
votes

hkey_classes_root \\. \ Type de contenu (où "ext" est l'extension de fichier) contenir normalement le type MIME.


0 commentaires

0
votes

collé de 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;
}


0 commentaires

1
votes

dans Windows 10, les différents types MIME sont stockés dans le registre à l'adresse suivante: xxx

avec une clé pour chaque type de contenu (par exemple, texte / simple ) sous cette clé.


0 commentaires