【问题标题】:How can I determine the content type of a file in .NET?如何确定 .NET 中文件的内容类型?
【发布时间】:2009-02-11 17:02:46
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: text encoding file-io binary streamreader


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

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

      您可以试用这个免费的 mime 检测器库。 http://www.netomatix.com/Products/DocumentManagement/MimeDetector.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-09
        • 2018-05-27
        • 2011-11-03
        • 1970-01-01
        • 2011-03-13
        • 2011-01-28
        • 1970-01-01
        相关资源
        最近更新 更多