天天看點

利用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;

傳回導讀目錄,閱讀更多随筆

分割線,以下為部落格簽名:

軟體臭蟲情未了

編碼一分鐘

測試十年功

随筆如有錯誤或不恰當之處、為希望不誤導他人,望大俠們給予批評指正。