Les Snippets

Connexion

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

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 04/10/2007 00:16:31 et initié par ShareVB [Liste]
Vue : 5891
Catégorie(s) : Base de registre, Fichier / Disque, Trucs & Astuces
Langages dispo pour ce code :
- C# 2.x
- VB 2005



Langage : C# 2.x
Date ajout : 08/10/2007
Posté par ShareVB [Liste]
        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;
        }

Langage : VB 2005
Date ajout : 08/12/2007
Posté par ShareVB [Liste]
        ''' <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 Shared Function GetMIMEType(ByVal szFileName As String, ByVal forceDatabase As Boolean) As String
            'type MIME renvoyé
            Dim ret As String = Nothing
            'extension du fichier avec "."
            Dim szExt As String = Path.GetExtension(szFileName)
            'valeur d'une valeur d'une clé de registre
            Dim val As Object = Nothing
            'si on veut lire dans HKEY_CLASSES_ROOT directement
            If Not forceDatabase Then
                'on essaie d'ouvrir la clé
                Dim extKey As RegistryKey = Registry.ClassesRoot.OpenSubKey(szExt)
                If Not extKey Is Nothing Then
                    '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()
                End If
            End If
            '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 Not Not forceDatabase AndAlso val Is Nothing Then
                Return val.ToString()
            Else
                'ouvre HKEY_CLASSES_ROOT\MIME\DataBase\Content Type
                Dim contentTypeKey As RegistryKey = Registry.ClassesRoot.OpenSubKey("MIME\Database\Content Type")
                'parcourt toutes les sous clés (types MIME connus)
                For Each subkey As String In contentTypeKey.GetSubKeyNames()
                    'ouvre HKEY_CLASSES_ROOT\MIME\DataBase\Content Type\<type MIME>
                    Dim contentTypeSubKey As RegistryKey = contentTypeKey.OpenSubKey(subkey)
                    'récupère l'extension associée
                    Dim ext As Object = contentTypeSubKey.GetValue("Extension")
                    'si ca correspond on a trouvé
                    If Not ext Is Nothing AndAlso ext.ToString() = szExt Then
                        ret = subkey
                        Exit For
                    End If
                    contentTypeSubKey.Close()
                Next
                contentTypeKey.Close()
            End If
            Return ret
        End Function


Snippets en rapport avec : Fichier, Mime, Content type



Codes sources en rapport avec : Fichier, Mime, Content type

{PHP} TYPE DU FICHER
Cette petite fonction toute simple vous determine l'extension (et donc le type) d'un fichier. Il vo...

{PHP} UPLOAD CHEZ FREE QUI MARCHE!!
Je me suis inspiré d'une fonction BCOPY créer par BeB3RePHPLover: http://www.phpc...

{Visual Basic, VB6, VB.NET, VB 2005} CRYPTAGE DÉCRYPTAGE DE FICHIER PAR MOT DE PASSE
Cette source crypt et decrypt simplement par un mot de passe et un codage interne à la source, le se...

{C / C++ / C++.NET} COPIE AVEC SHFILEOPERATION
Bonjour Voici un exemple de l'utilisation de la fonction SHFileOperation de l'api windows. La ...

{Visual Basic, VB6, VB.NET, VB 2005} FILE FOLDER LOCKER - BLOQUER (ET DÉBLOQUER) L'ACCÈS À CERTAINS FICHIERS ET DOSSIERS [DLL]
Cette DLL est une collection de fichier et dossier sur laquelle vous pourrez appliquer un verrou ...

{PHP} TRADUCTION DE FICHIERS DE LANGUE AVEC GOOGLE GTRANSLATE
Un petit script vite fait qui traduit des fichier de langue PHP via un traitement par lot en utilisa...

{C / C++ / C++.NET} CHANGEUR DATE FICHIER (WIN32)
On choisit la date et on applique sur un ficihier ou tous les fichiers d'un dossier. J'avais fait...

{Visual Basic, VB6, VB.NET, VB 2005} GADGET DIAPORAMA
Pour ceux qui n'ont pas Vista, voici le programme qu'il vous faut! Un "Gadget" qui se place en haut ...

{PHP} LISTE REPERTOIRE (DIR EN PHP)
Liste le contenue d'un répertoire sur serveur web et affiche icones date et taille approprié Mais ...

{C / C++ / C++.NET} TRANSFERT DE FICHIER TCP [GCC - GTK]
Transfert de fichier via socket en langage C : L'utilisateur du serveur choisie le fichier que le c...