ホームページ >バックエンド開発 >C++ >.NETでファイル署名を使用してファイルのMIMEタイプを決定するにはどうすればよいですか?

.NETでファイル署名を使用してファイルのMIMEタイプを決定するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-31 14:56:13475ブラウズ

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

.NET内のファイルの署名がファイルMIMEタイプを決定しました正しい処理と操作には、ファイルを正確に識別するMIMEタイプが不可欠です。ファイル拡張機能が不足しているか、間違っている場合、ファイルの署名がファイルタイプに依存して、ファイルタイプを正確に決定する必要があります。この記事では、.NETでこの機能を達成する方法について説明します。 urlmon.dll

を使用したソリューション

urlmon.dllライブラリを使用して提供されるソリューションは、ファイルの署名に基づいてmimeタイプを抽出します。この方法は、次の手順で実装できます。

必要なアセンブリセットを紹介します:

  1. findMimeFromData関数を定義します:

    <code class="language-csharp">using System.Runtime.InteropServices;</code>
  2. ファイルからmimeタイプを検索する関数を作成します。

    getmimefromfile関数を使用して、mimeタイプを取得します:
    <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. 上記のコードフラグメントでは、ファイルを

    配列に読み取る最初の256バイトなど、一部のコードは省略されていることに注意してください。 完全な実装には、必要なエラー処理とファイルの読み取りロジックが必要です。 さらに、メソッドの使用はオペレーティングシステムに依存する可能性があり、異なる環境で互換性の問題が存在する可能性があります。 より安定したソリューションは、他の.NETライブラリの使用を検討するか、それ自体でファイル署名分析を実装する必要がある場合があります。
    <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>

以上が.NETでファイル署名を使用してファイルのMIMEタイプを決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。