Récupérer le type MIME d'un fichier

Contenu du snippet

        using Microsoft.Win32;
        using System.IO;
        /// <summary>
        /// Récupère le type MIME d'un fichier
        /// </summary>
        /// <param name="szFileName">Nom du fichier dont on veut le type MIME</param>
        /// <param name="forceDatabase">true pour rechercher 
        ///     dans HKEY_CLASSES_ROOT\MIME\DataBase\Content Type (MIME -> extension), 
        /// false pour rechercher 
        ///     dans HKEY_CLASSES_ROOT (extension -> MIME)</param>
        /// <returns>le type MIME ou null</returns>
        public static string GetMIMEType(string szFileName,bool forceDatabase)
        {
            //type MIME renvoyé
            string ret = null;
            //extension du fichier avec "."
            string szExt = Path.GetExtension(szFileName);
            //valeur d'une valeur d'une clé de registre
            object val = null;
            //si on veut lire dans HKEY_CLASSES_ROOT directement
            if (!forceDatabase)
            {
                //on essaie d'ouvrir la clé
                RegistryKey extKey = Registry.ClassesRoot.OpenSubKey(szExt);
                if (extKey != null)
                {
                    //il peut y avoir une valeur "Content Type" contenant le type MIME mais ce n'est pas obligatoire
                    val = extKey.GetValue("Content Type");
                    extKey.Close();
                }
            }
            //si on a déjà trouvé un type MIME et que l'on ne force pas la recherche dans HKEY_CLASSES_ROOT\MIME\DataBase\Content Type
            if (!forceDatabase && val != null)
                return val.ToString();
            else
            {
                //ouvre HKEY_CLASSES_ROOT\MIME\DataBase\Content Type
                RegistryKey contentTypeKey = Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type");
                //parcourt toutes les sous clés (types MIME connus)
                foreach (string subkey in contentTypeKey.GetSubKeyNames())
                {
                    //ouvre HKEY_CLASSES_ROOT\MIME\DataBase\Content Type\<type MIME>
                    RegistryKey contentTypeSubKey = contentTypeKey.OpenSubKey(subkey);
                    //récupère l'extension associée
                    object ext = contentTypeSubKey.GetValue("Extension");
                    //si ca correspond on a trouvé
                    if (ext != null && ext.ToString() == szExt)
                    {
                        ret = subkey;
                        break;
                    }
                    contentTypeSubKey.Close();
                }
                contentTypeKey.Close();
            }
            return ret;
        }


Compatibilité : C# 2.x

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.