С# Получить расширение файла по типу содержимого
Как получить расширение файла по типу содержимого?
Пример. Я знаю, что этот файл является "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);
}