首頁 > 後端開發 > C++ > 如何使用.NET中的文件簽名確定文件的MIME類型?

如何使用.NET中的文件簽名確定文件的MIME類型?

Susan Sarandon
發布: 2025-01-31 14:56:13
原創
519 人瀏覽過

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

基於 .NET 中的簽名確定文件 MIME 類型

準確識別文件的 MIME 類型對於正確的處理和操作至關重要。當文件擴展名缺失或不正確時,就必須依靠文件簽名來準確確定文件類型。本文探討如何在 .NET 中實現此功能。

使用 urlmon.dll 的解決方案

提供的解決方案使用 urlmon.dll 庫根據文件簽名提取 MIME 類型。此方法可以通過以下步驟實現:

  1. 導入必要的程序集:

    using System.Runtime.InteropServices;
    登入後複製
  2. 定義 FindMimeFromData 函數:

    [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
    );
    登入後複製
  3. 創建一個從文件檢索 MIME 類型的函數:

    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";
        }
    }
    登入後複製
  4. 使用 GetMimeFromFile 函數獲取 MIME 類型:

    string mimeType = GetMimeFromFile("myfile.unknown");
    登入後複製

請注意,上述代碼片段中省略了部分代碼,例如讀取文件的前 256 個字節到 buffer 數組中。 完整的實現需要添加必要的錯誤處理和文件讀取邏輯。 此外,使用 urlmon.dll 的方法可能依賴於操作系統,在不同環境下可能存在兼容性問題。 更穩健的解決方案可能需要考慮使用其他 .NET 庫或自行實現文件簽名解析。

以上是如何使用.NET中的文件簽名確定文件的MIME類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板