windows客户端开发--获取windows系统中文件的MIME

来源:互联网 发布:苹果便签软件关闭 编辑:程序博客网 时间:2024/05/19 16:29

首先,什么是MIME,是不是文件的后缀名呢?

当然不是。

有时候我们需要获取某个文件的后缀名,这也许对你来说太小case了,你可能不加思考的写了一个函数,更加文件名字符串查找最后一个’.’,然后取最有一个’.’之后的字符串,即为我们要得到的后缀名。

看似非常完美,但确实漏洞百出。

如果我的文件没有后缀名怎么办?
如果我的一张png图片,我强制把后缀名改为jpg怎么办?
这样你根据文件名字方法就不能获得百分百正确的后缀名。

所以,就该MIME出场了!

何为MIME?

MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。
MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。

接下来的工作就是在windows系统上,如何根据一个文件名路径,获取这个文件的mime呢?

起初,我觉得应该找一个第三方库来实现这个小小的功能,比如libmagic。

但是暮然回首,发现windows为我们提供了api。这里要插一句:windows确实是最复杂的操作系统。有时候我们再忽略了太多windows api给我们提供的函数。

FindMimeFromData
作用:
Determines the MIME type from the data provided.
原型:

HRESULT FindMimeFromData(             LPBC    pBC,             LPCWSTR pwzUrl,             LPVOID  pBuffer,             DWORD   cbSize,             LPCWSTR pwzMimeProposed,             DWORD   dwMimeFlags,             LPWSTR  *ppwzMimeOut,  _Reserved_ DWORD   dwReserved);

参数:

pBC
A pointer to the IBindCtx interface. Can be set to NULL.
pwzUrl
A pointer to a string value that contains the URL of the data. Can be set to NULL if pBuffer contains the data to be sniffed.
pBuffer
A pointer to the buffer that contains the data to be sniffed. Can be set to NULL if pwzUrl contains a valid URL.
cbSize
An unsigned long integer value that contains the size of the buffer.
pwzMimeProposed
A pointer to a string value that contains the proposed MIME type. This value is authoritative if type cannot be determined from the data. If the proposed type contains a semi-colon (;) it is removed. This parameter can be set to NULL.

下面看看如何应用,首先是读一个文件,然后调用FindMimeFromData函数即可:

#include <urlmon.h>#include <stdio.h>#include <Windows.h>#include <iostream>#pragma comment(lib, "Urlmon.lib")int main(int argc, char* argv[]){    char buff[256];    LPWSTR out;    FILE *in = fopen("D:\\libsakura.lib", "rb");    fread(buff, 1, 256, in);    FindMimeFromData(NULL, NULL, buff, 256, NULL, FMFD_DEFAULT, &out, 0);    printf("%ls\n", out);    return 0;}

下面是文件类型对应的MIME,仅供参考:

application/envoy   evyapplication/fractals    fifapplication/futuresplash    splapplication/hta htaapplication/internet-property-stream    acxapplication/mac-binhex40    hqxapplication/msword  docapplication/msword  dotapplication/octet-stream    *application/octet-stream    binapplication/octet-stream    classapplication/octet-stream    dmsapplication/octet-stream    exeapplication/octet-stream    lhaapplication/octet-stream    lzhapplication/oda odaapplication/olescript   axsapplication/pdf pdfapplication/pics-rules  prfapplication/pkcs10  p10application/pkix-crl    crlapplication/postscript  aiapplication/postscript  epsapplication/postscript  psapplication/rtf rtfapplication/set-payment-initiation  setpayapplication/set-registration-initiation setregapplication/vnd.ms-excel    xlaapplication/vnd.ms-excel    xlcapplication/vnd.ms-excel    xlmapplication/vnd.ms-excel    xlsapplication/vnd.ms-excel    xltapplication/vnd.ms-excel    xlwapplication/vnd.ms-outlook  msgapplication/vnd.ms-pkicertstore sstapplication/vnd.ms-pkiseccat    catapplication/vnd.ms-pkistl   stlapplication/vnd.ms-powerpoint   potapplication/vnd.ms-powerpoint   ppsapplication/vnd.ms-powerpoint   pptapplication/vnd.ms-project  mppapplication/vnd.ms-works    wcmapplication/vnd.ms-works    wdbapplication/vnd.ms-works    wksapplication/vnd.ms-works    wpsapplication/winhlp  hlpapplication/x-bcpio bcpioapplication/x-cdf   cdfapplication/x-compress  zapplication/x-compressed    tgzapplication/x-cpio  cpioapplication/x-csh   cshapplication/x-director  dcrapplication/x-director  dirapplication/x-director  dxrapplication/x-dvi   dviapplication/x-gtar  gtarapplication/x-gzip  gzapplication/x-hdf   hdfapplication/x-internet-signup   insapplication/x-internet-signup   ispapplication/x-iphone    iiiapplication/x-javascript    jsapplication/x-latex latexapplication/x-msaccess  mdbapplication/x-mscardfile    crdapplication/x-msclip    clpapplication/x-msdownload    dllapplication/x-msmediaview   m13application/x-msmediaview   m14application/x-msmediaview   mvbapplication/x-msmetafile    wmfapplication/x-msmoney   mnyapplication/x-mspublisher   pubapplication/x-msschedule    scdapplication/x-msterminal    trmapplication/x-mswrite   wriapplication/x-netcdf    cdfapplication/x-netcdf    ncapplication/x-perfmon   pmaapplication/x-perfmon   pmcapplication/x-perfmon   pmlapplication/x-perfmon   pmrapplication/x-perfmon   pmwapplication/x-pkcs12    p12application/x-pkcs12    pfxapplication/x-pkcs7-certificates    p7bapplication/x-pkcs7-certificates    spcapplication/x-pkcs7-certreqresp p7rapplication/x-pkcs7-mime    p7capplication/x-pkcs7-mime    p7mapplication/x-pkcs7-signature   p7sapplication/x-sh    shapplication/x-shar  sharapplication/x-shockwave-flash   swfapplication/x-stuffit   sitapplication/x-sv4cpio   sv4cpioapplication/x-sv4crc    sv4crcapplication/x-tar   tarapplication/x-tcl   tclapplication/x-tex   texapplication/x-texinfo   texiapplication/x-texinfo   texinfoapplication/x-troff roffapplication/x-troff tapplication/x-troff trapplication/x-troff-man manapplication/x-troff-me  meapplication/x-troff-ms  msapplication/x-ustar ustarapplication/x-wais-source   srcapplication/x-x509-ca-cert  cerapplication/x-x509-ca-cert  crtapplication/x-x509-ca-cert  derapplication/ynd.ms-pkipko   pkoapplication/zip zipaudio/basic auaudio/basic sndaudio/mid   midaudio/mid   rmiaudio/mpeg  mp3audio/x-aiff    aifaudio/x-aiff    aifcaudio/x-aiff    aiffaudio/x-mpegurl m3uaudio/x-pn-realaudio    raaudio/x-pn-realaudio    ramaudio/x-wav wavimage/bmp   bmpimage/cis-cod   codimage/gif   gifimage/ief   iefimage/jpeg  jpeimage/jpeg  jpegimage/jpeg  jpgimage/pipeg jfifimage/svg+xml   svgimage/tiff  tifimage/tiff  tiffimage/x-cmu-raster  rasimage/x-cmx cmximage/x-icon    icoimage/x-portable-anymap pnmimage/x-portable-bitmap pbmimage/x-portable-graymap    pgmimage/x-portable-pixmap ppmimage/x-rgb rgbimage/x-xbitmap xbmimage/x-xpixmap xpmimage/x-xwindowdump xwdmessage/rfc822  mhtmessage/rfc822  mhtmlmessage/rfc822  nwstext/css    csstext/h323   323text/html   htmtext/html   htmltext/html   stmtext/iuls   ulstext/plain  bastext/plain  ctext/plain  htext/plain  txttext/richtext   rtxtext/scriptlet  scttext/tab-separated-values   tsvtext/webviewhtml    htttext/x-component    htctext/x-setext   etxtext/x-vcard    vcfvideo/mpeg  mp2video/mpeg  mpavideo/mpeg  mpevideo/mpeg  mpegvideo/mpeg  mpgvideo/mpeg  mpv2video/quicktime movvideo/quicktime qtvideo/x-la-asf  lsfvideo/x-la-asf  lsxvideo/x-ms-asf  asfvideo/x-ms-asf  asrvideo/x-ms-asf  asxvideo/x-msvideo avivideo/x-sgi-movie   moviex-world/x-vrml  flrx-world/x-vrml  vrmlx-world/x-vrml  wrlx-world/x-vrml  wrzx-world/x-vrml  xafx-world/x-vrml  xof
1 0