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