第一個種方式利用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;
傳回導讀目錄,閱讀更多随筆
分割線,以下為部落格簽名:
軟體臭蟲情未了
編碼一分鐘
測試十年功
随筆如有錯誤或不恰當之處、為希望不誤導他人,望大俠們給予批評指正。