Text 如何确定.NET中文件的内容类型?

Text 如何确定.NET中文件的内容类型?,text,encoding,file-io,binary,streamreader,Text,Encoding,File Io,Binary,Streamreader,我有一个文件名,我必须能够从磁盘读取它,并通过网络发送它的内容。我需要能够确定文件是文本文件还是二进制文件,以便知道是使用StreamReader还是BinaryReader。我需要知道内容类型的另一个原因是,如果它是二进制的,我必须在通过网络发送数据之前对数据进行MIME编码。我还希望能够告诉消费者内容类型是什么(如果是文本,则包括编码) 谢谢 您需要提前知道文件的类型,或者被告知文件的类型。如果只是通过网络发送文件,为什么不使用Stream.Write和Stream.Read方法呢?让服务的

我有一个文件名,我必须能够从磁盘读取它,并通过网络发送它的内容。我需要能够确定文件是文本文件还是二进制文件,以便知道是使用StreamReader还是BinaryReader。我需要知道内容类型的另一个原因是,如果它是二进制的,我必须在通过网络发送数据之前对数据进行MIME编码。我还希望能够告诉消费者内容类型是什么(如果是文本,则包括编码)


谢谢

您需要提前知道文件的类型,或者被告知文件的类型。如果只是通过网络发送文件,为什么不使用Stream.Write和Stream.Read方法呢?让服务的使用者确定文件类型。您不需要使用*Reader类,因为您没有解释服务器上的数据。

提供了关于文件内容类型的最佳提示

它并不完美,但我成功地使用了以下方法:

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;
}

你可以试试这个免费的mime检测器库。

由于某些限制,我无法通过网络将文件作为二进制数据发送。如果它是一个二进制文件,我必须对它进行MIME编码,如果它是一个文本文件,我将按原样发送它。这就是为什么我需要知道内容类型。