首页 > 后端开发 > C++ > 如何使用.NET中的文件签名确定文件的MIME类型?

如何使用.NET中的文件签名确定文件的MIME类型?

Susan Sarandon
发布: 2025-01-31 14:56:13
原创
470 人浏览过

How Can I Determine a File's MIME Type Using File Signatures in .NET?

基于 .NET 中的签名确定文件 MIME 类型

准确识别文件的 MIME 类型对于正确的处理和操作至关重要。当文件扩展名缺失或不正确时,就必须依靠文件签名来准确确定文件类型。本文探讨如何在 .NET 中实现此功能。

使用 urlmon.dll 的解决方案

提供的解决方案使用 urlmon.dll 库根据文件签名提取 MIME 类型。此方法可以通过以下步骤实现:

  1. 导入必要的程序集:

    <code class="language-csharp">using System.Runtime.InteropServices;</code>
    登录后复制
  2. 定义 FindMimeFromData 函数:

    <code class="language-csharp">[DllImport(@"urlmon.dll", CharSet = CharSet.Auto)]
    private static extern uint FindMimeFromData(
        uint pBC,
        [MarshalAs(UnmanagedType.LPStr)] string pwzUrl,
        [MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer,
        uint cbSize,
        [MarshalAs(UnmanagedType.LPStr)] string pwzMimeProposed,
        uint dwMimeFlags,
        out uint ppwzMimeOut,
        uint dwReserverd
    );</code>
    登录后复制
  3. 创建一个从文件检索 MIME 类型的函数:

    <code class="language-csharp">public static string GetMimeFromFile(string filename)
    {
        // 为简洁起见,省略文件验证
        byte[] buffer = new byte[256];
        //...
    
        try
        {
            uint mimetype;
            FindMimeFromData(0, null, buffer, 256, null, 0, out mimetype, 0);
            IntPtr mimeTypePtr = new IntPtr(mimetype);
            string mime = Marshal.PtrToStringUni(mimeTypePtr);
            Marshal.FreeCoTaskMem(mimeTypePtr);
            return mime;
        }
        catch (Exception e)
        {
            return "unknown/unknown";
        }
    }</code>
    登录后复制
  4. 使用 GetMimeFromFile 函数获取 MIME 类型:

    <code class="language-csharp">string mimeType = GetMimeFromFile("myfile.unknown");</code>
    登录后复制

请注意,上述代码片段中省略了部分代码,例如读取文件的前 256 个字节到 buffer 数组中。 完整的实现需要添加必要的错误处理和文件读取逻辑。 此外,使用 urlmon.dll 的方法可能依赖于操作系统,在不同环境下可能存在兼容性问题。 更稳健的解决方案可能需要考虑使用其他 .NET 库或自行实现文件签名解析。

以上是如何使用.NET中的文件签名确定文件的MIME类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板