利用Win32API 读取文件头获取Mime-Type

第一个种方式利用Win32API 读取文件头获取Mime-Type

  
[DllImport( @" urlmon.dll " , CharSet = CharSet.Auto)]
private extern static System.UInt32 FindMimeFromData(
System.UInt32 pBC,
[MarshalAs(UnmanagedType.LPStr)] System.String pwzUrl,
[MarshalAs(UnmanagedType.LPArray)]
byte [] pBuffer,
System.UInt32 cbSize,
[MarshalAs(UnmanagedType.LPStr)] System.String pwzMimeProposed,
System.UInt32 dwMimeFlags,
out System.UInt32 ppwzMimeOut,
System.UInt32 dwReserverd
);

public 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))
{
if (fs.Length >= 256 )
fs.Read(buffer,
0 , 256 );
else
fs.Read(buffer,
0 , ( int )fs.Length);
}
try
{
System.UInt32 mimetype;
FindMimeFromData(
0 , null , buffer, 256 , null , 0 , out mimetype, 0 );
System.IntPtr mimeTypePtr
= new IntPtr(mimetype);
string mime = Marshal.PtrToStringUni(mimeTypePtr);
Marshal.FreeCoTaskMem(mimeTypePtr);
return mime;
}
catch (Exception e)
{
return " unknown/unknown " ;
}
}

第二种方式 利用系统注册表查找Mime-Type

  
using System.IO;
using Microsoft.Win32;

string GetMimeType(FileInfo fileInfo)
{
string mimeType = " application/unknown " ;

RegistryKey regKey
= Registry.ClassesRoot.OpenSubKey(
fileInfo.Extension.ToLower()
);

if (regKey != null )
{
object contentType = regKey.GetValue( " Content Type " );

if (contentType != null )
mimeType
= contentType.ToString();
}

return mimeType;
}

你可能感兴趣的:(Win32)