Как получить правильное расширение файла, когда вы знаете тип контента - PullRequest
4 голосов
/ 06 мая 2011

У меня есть байт [], содержащий данные для файла.Массив может содержать данные для нескольких различных типов файлов, таких как xml, jpg, html, csv и т. Д.

Мне нужно сохранить этот файл на диске.

Я ищу код ac #, чтобы узнать правильное расширение файла, когда вы знаете тип содержимого, но не уверены в расширении файла?

Ответы [ 2 ]

9 голосов
/ 06 мая 2011

http://cyotek.com/article/display/mime-types-and-file-extensions имеет фрагмент для этого, по сути, ищет расширение в реестре в HKEY_CLASSES_ROOT\MIME\Database\Content Type\<mime type>

2 голосов
/ 13 апреля 2013

Может быть, этот код конвертера может помочь:

        private static ConcurrentDictionary<string, string> MimeTypeToExtension = new ConcurrentDictionary<string, string>();
    private static ConcurrentDictionary<string, string> ExtensionToMimeType = new ConcurrentDictionary<string, string>();

    public static string ConvertMimeTypeToExtension(string mimeType)
    {
        if (string.IsNullOrWhiteSpace(mimeType))
            throw new ArgumentNullException("mimeType");

        string key = string.Format(@"MIME\Database\Content Type\{0}", mimeType);
        string result;
        if (MimeTypeToExtension.TryGetValue(key, out result))
            return result;

        RegistryKey regKey;
        object value;

        regKey = Registry.ClassesRoot.OpenSubKey(key, false);
        value = regKey != null ? regKey.GetValue("Extension", null) : null;
        result = value != null ? value.ToString() : string.Empty;

        MimeTypeToExtension[key] = result;
        return result;
    }

    public static string ConvertExtensionToMimeType(string extension)
    {

        if (string.IsNullOrWhiteSpace(extension))
            throw new ArgumentNullException("extension");

        if (!extension.StartsWith("."))
            extension = "." + extension;

        string result;
        if (ExtensionToMimeType.TryGetValue(extension, out result))
            return result;

        RegistryKey regKey;
        object value;

        regKey = Registry.ClassesRoot.OpenSubKey(extension, false);
        value = regKey != null ? regKey.GetValue("Content Type", null) : null;
        result = value != null ? value.ToString() : string.Empty;

        ExtensionToMimeType[extension] = result;
        return result;
    }

происхождение идеи происходит отсюда: Фрагмент: типы MIME и расширения файлов

...