web-dev-qa-db-ja.com

C#コンテンツタイプごとにファイル拡張子を取得する

コンテンツタイプ別にファイル拡張子を取得するにはどうすればよいですか?

例ファイルが「text/css」であるため、拡張子は「.css」になります。

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

    { DETERMINATION CODE IN HERE }

    return ext;
}
25
PSSGCSim

私が知っている "最善の"解決策は、レジストリを照会することです。ここにサンプルコードがあります。 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] .NET Core /標準互換のポータブルな方法

.NET Frameworkを実行している通常の古いWindowsマシンではBradleyの答えは引き続き完璧ですが、RegistryはWindows固有であり、Windows以外の環境にアプリを移植すると失敗します

幸いなことに、公式のMIMEタイプと対応する拡張機能のハードコードされたマップを基本的に含む非常に小さなNuGetライブラリがあり、外部依存関係はありませんここに https://github.com/samuelneff/MimeTypeMap 。 NuGetでは MediaTypeMap として利用できます。パッケージをインストールした後の呼び出しは次のように簡単です:

MimeTypeMap.GetExtension("audio/wav")

あなたの例にそれを入れるには、あなたは簡単にできます:

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