Как определить тип содержимого файла в .NET? - PullRequest
3 голосов
/ 11 февраля 2009

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

Спасибо!

Ответы [ 3 ]

2 голосов
/ 11 февраля 2009

Расширение имени файла обеспечивает ваш лучший намек на тип содержимого файла.

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

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;
}
1 голос
/ 11 февраля 2009

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

0 голосов
/ 11 февраля 2009

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

...