Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk menentukan jenis mime fail menggunakan tandatangannya dalam .net?

Bagaimana untuk menentukan jenis mime fail menggunakan tandatangannya dalam .net?

DDD
DDDasal
2025-01-31 15:01:09672semak imbas

How to Determine a File's MIME Type Using its Signature in .NET?

Tentukan jenis mime

. NET Framework menyediakan kaedah tandatangan berasaskan fail dan bukannya memperluaskan jenis fail MIME Pengiktirafan nama. Ini amat berguna apabila memproses fail yang salah atau hilang.

Untuk menentukan jenis MIME, anda boleh menggunakan fungsi

yang dieksport. Fungsi ini menerima penampan byte tandatangan fail dan mengembalikan jenis mime. urlmon.dll FindMimeFromData Berikut adalah contoh cara menggunakan fungsi ini untuk menggunakan fungsi ini:

Kaedah ini menyediakan kaedah yang boleh dipercayai yang hanya boleh mendapatkan jenis mime berdasarkan tandatangan fail, tanpa mengira pelanjutan. Peningkatan kod adalah bahawa lebih tepat untuk mengendalikan bilangan bait yang dibaca untuk mengelakkan masalah potensi array menyeberangi sempadan.
<code class="language-csharp">using System.Runtime.InteropServices;
...

[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
);

public static string GetMimeFromFile(string filename)
{
    if (!File.Exists(filename))
        throw new FileNotFoundException($"{filename} not found");

    byte[] buffer = new byte[256];
    using (FileStream fs = new FileStream(filename, FileMode.Open))
    {
        int bytesRead = fs.Read(buffer, 0, 256); // Read at most 256 bytes
        if (bytesRead < 256)
        {
            Array.Resize(ref buffer, bytesRead); // Resize buffer if less than 256 bytes were read
        }
    }
    try
    {
        uint mimetype;
        FindMimeFromData(0, null, buffer, (uint)buffer.Length, 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>

Atas ialah kandungan terperinci Bagaimana untuk menentukan jenis mime fail menggunakan tandatangannya dalam .net?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn