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

发布于 2024-07-13 16:21:36 字数 207 浏览 9 评论 0原文

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

谢谢!

I'm given a filename and I have to be able to read it from disk and send its contents over a network. I need to be able to determine whether the file is text or binary so I know whether to use a StreamReader or BinaryReader. Another reason why I need to know the content type is because if it is binary, I have to MIME encode the data before sending it over the wire. I'd also like to be able to tell the consumer what the content type is (including the encoding if it is text).

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

兔小萌 2024-07-20 16:21:36

文件扩展名提供了有关文件内容类型的最佳提示。

它并不完美,但我使用以下方法取得了一些成功:

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

The filename extension provides your best hint at the content type of a file.

It's not perfect, but I've used the following with some success:

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;
}
相思碎 2024-07-20 16:21:36

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

You either need to know the type of file ahead of time, or be told what type the file is. And why don't you just use the Stream.Write and Stream.Read methods if all you're doing is sending the file over a network? Let the consumer of the service determine the file type. You don't need to use the *Reader classes since you aren't interpreting the data on your server.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文