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
- windows客户端开发--获取windows系统中文件的MIME
- windows系统中文件共享.
- Windows Store apps开发[22]Windows 8: WinRT中文件的正确读写方法
- 关于windows中文件的命名约定
- 关于windows中文件的命名约定
- windows中文件的API 转
- Windows批处理中文件的属性
- windows客户端开发--如何获取TrustedInstaller权限
- Windows和Linux/Unix系统中文件路径使用总结
- 复制Windows中文件致LINUX系统中
- 在windows系统中文件的实际大小与文件所占硬盘空间的大小
- windows explorer中选中文件
- windows编程中文件操作
- [招聘] 中文的LinkedIn项目招聘服务器端Linux开发和Windows客户端开发
- windows客户端开发--为你的客户端增加日志系统(log4cplus)
- GITHUB客户端的获取(windows版本)
- Windows驱动开发之获取系统时间
- Git客户端(Windows系统)的使用
- Environment.getExternalStorageDirectory() 获取内存
- 【LeetCode】14. Longest Common Prefix 最长公共前缀问题
- linux下mysql的root密码忘记了解决方案
- linux内核参数Oracle相关调整(网摘)
- 无知造就对阿法狗(AlphaGo)的恐惧与喧闹
- windows客户端开发--获取windows系统中文件的MIME
- 项目4-换分币
- dbms_lock.sleep,日期格式
- gcc常用参数
- ZooKeeper系列之一:ZooKeeper简介
- Eclipse中常用快捷键
- 本地模式使用JAVA SACLA 开发 Spark SQL DataFrame
- Android--使用活动响应网页
- sizeof和sizeof(string)的问题