''' <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