web-dev-qa-db-fra.com

C # Obtenir l'extension de fichier par type de contenu

Comment puis-je obtenir une extension de fichier par type de contenu?

Exemple Je sais que le fichier est "text/css" donc l'extension sera ".css".

private static string GetExtension(string contentType)
{
    string ext = ".";

    { DETERMINATION CODE IN HERE }

    return ext;
}
25
PSSGCSim

La "meilleure" solution que je connaisse consiste à interroger le registre. Vous pouvez trouver un exemple de code ici. http://cyotek.com/blog/mime-types-and-file-extensions

 public static string GetDefaultExtension(string mimeType)
    {
      string result;
      RegistryKey key;
      object value;

      key = Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type\" + mimeType, false);
      value = key != null ? key.GetValue("Extension", null) : null;
      result = value != null ? value.ToString() : string.Empty;

      return result;
    }
31
Bradley Uffner

[2019] Moyen portable compatible avec .NET Core/Standard

Alors que la réponse de Bradley continue d'être parfaite sur les anciennes machines Windows classiques exécutant .NET Framework, Registry est spécifique à Windows et échouera lors du portage de l'application vers un environnement non Windows .

Heureusement, il existe une très petite bibliothèque NuGet qui contient essentiellement une carte codée en dur des types MIME officiels et des extensions correspondantes sans aucune dépendance externe ici: https://github.com/samuelneff/MimeTypeMap . Il est disponible sur NuGet sous la forme MediaTypeMap . Après avoir installé le paquet appelant, c'est aussi simple que:

MimeTypeMap.GetExtension("audio/wav")

Pour le mettre dans votre exemple, vous pouvez simplement:

private static string GetExtension(string contentType)
{
    return MimeTypes.MimeTypeMap.GetExtension(contentType);
}
17
Marcell Toth