2009-02-11 69 views
3

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

谢谢!

回答

2

filename extension为文件的内容类型提供了最佳提示。

它并不完美,但我已经使用了一些成功如下:

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

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

+0

由于受到一定的限制,我无法通过网络将文件作为二进制数据发送。如果它是一个二进制文件,我必须对其进行MIME编码,如果它是一个文本文件,我将按原样发送它。这就是为什么我需要知道内容类型。 – 2009-02-11 18:28:36

相关问题