тип контента следовательно

Там кто-либо создается в функции, которая возвращает тип контента на основе расширения файла?

16
задан mrblah 15 December 2009 в 20:17
поделиться

2 ответа

Насколько мне известно, нет. Но вы можете использовать этот код:

using Microsoft.Win32;

RegistryKey key = Registry.ClassesRoot.OpenSubKey(extension);
string contentType = key.GetValue("Content Type").ToString();

Вам потребуется добавить дополнительный код для обработки ошибок.

Примечание: расширение должно начинаться с точки, как в .txt .

]
16
ответ дан 30 November 2019 в 17:27
поделиться

FYKI, проверьте реестр по адресу \HKEY_CLASSES_ROOT\MIME\Database\Content Тип. Будет список типов содержимого и расширений файлов. Если вы могли загрузить эту информацию через windows API, то вы можете получить ваше файловое расширение для отображения типов содержимого.

hth

UPDATE : [источник][1]

public string GetMIMEType(string filepath)
    {
        FileInfo fileInfo = new FileInfo(filepath);
        string fileExtension = fileInfo.Extension.ToLower();

        // direct mapping which is fast and ensures these extensions are found
        switch (fileExtension)
        {
            case "htm":
            case "html":
                return "text/html";
            case "js":
                return "text/javascript"; // registry may return "application/x-javascript"
        }



            // see if we can find extension info anywhere in the registry
    //Note : there is not a ContentType key under ALL the file types , check Run --> regedit , then extensions !!!

        RegistryPermission regPerm = new RegistryPermission(RegistryPermissionAccess.Read, @"\\HKEY_CLASSES_ROOT");

        // looks for extension with a content type
        RegistryKey rkContentTypes = Registry.ClassesRoot.OpenSubKey(fileExtension);
        if (rkContentTypes != null)
        {
            object key = rkContentTypes.GetValue("Content Type");
            if (key != null)
                return key.ToString().ToLower();
        }


        // looks for a content type with extension
        // Note : This would be problem if  multiple extensions associate with one content type.
        RegistryKey typeKey = Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type");

        foreach (string keyname in typeKey.GetSubKeyNames())
        {
            RegistryKey curKey = typeKey.OpenSubKey(keyname);
            if (curKey != null)
            {
                object extension = curKey.GetValue("Extension");
                if (extension != null)
                {
                    if (extension.ToString().ToLower() == fileExtension)
                    {
                        return keyname;
                    }
                }
            }
        }

        return null;
    } 

[1]: http://www.codeproject.com/KB/dotnet/ContentType.aspx?msg=2903389#xx2903389xx введите здесь код

6
ответ дан 30 November 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: