Вопрос

Мне задано имя файла, и я должен иметь возможность прочитать его с диска и отправить его содержимое по сети.Мне нужно иметь возможность определить, является ли файл текстовым или двоичным, чтобы я знал, использовать ли StreamReader или BinaryReader.Еще одна причина, по которой мне нужно знать тип контента, заключается в том, что если он двоичный, я должен MIME-кодировать данные перед отправкой их по проводу.Я также хотел бы иметь возможность сообщить потребителю, каков тип контента (включая кодировку, если это текст).

Спасибо!

Это было полезно?

Решение

В расширение имени файла предоставляет вам наилучшую подсказку о типе содержимого файла.

Это не идеально, но я с некоторым успехом использовал следующее:

private static string GetContentTypeFromRegistry(string file)
{
    RegistryKey contentTypeKey = Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type");

    foreach (string keyName in contentTypeKey.GetSubKeyNames())
    {
        if (System.IO.Path.GetExtension(file).ToLower().CompareTo((string)contentTypeKey.OpenSubKey(keyName).GetValue("Extension")) == 0)
        {
            return keyName;
        }
    }

    return "unknown";
}

private static string GetFileExtensionFromRegistry(string contentType)
{
    RegistryKey contentTypeKey = Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type\" + contentType);

    if (contentTypeKey != null)
    {
        string extension = (string)contentTypeKey.GetValue("Extension");

        if (extension != null)
        {
            return extension;
        }
    }

    return String.Empty;
}

Другие советы

Вам либо нужно заранее знать тип файла, либо вам скажут, какого типа этот файл.И почему бы вам просто не использовать Stream.Методы Write и Stream.Read, если все, что вы делаете, это отправляете файл по сети?Позвольте потребителю сервиса определить тип файла.Вам не нужно использовать классы * Reader, поскольку вы не интерпретируете данные на своем сервере.

Вы можете попробовать эту бесплатную библиотеку детекторов mime.http://www.netomatix.com/Products/DocumentManagement/MimeDetector.aspx

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top