С# Получить расширение файла по типу содержимого

Как получить расширение файла по типу содержимого?

Пример. Я знаю, что этот файл является "text/css", поэтому расширение будет ".css".

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

    { DETERMINATION CODE IN HERE }

    return ext;
}

Ответы

Ответ 1

"Лучшее" решение, о котором я знаю, - это запрос в реестр. Здесь вы можете найти пример кода. 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;
    }

Ответ 2

[2019].NET Core/Стандартный совместимый портативный способ

Несмотря на то, что ответ Брэдли остается идеальным на старых старых компьютерах с Windows, работающих под управлением .NET Framework, Registry зависит от Windows и завершится ошибкой при переносе приложения в среду, отличную от Windows.

К счастью, есть очень маленькая библиотека NuGet, которая по существу содержит жестко закодированную карту официальных типов MIME и соответствующих расширений без каких-либо внешних зависимостей здесь: https://github.com/samuelneff/MimeTypeMap. Он доступен на NuGet как MediaTypeMap. После установки вызова пакета это так же просто, как:

MimeTypeMap.GetExtension("audio/wav")

Чтобы привести это в свой пример, вы можете просто:

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