如何判断一个文档是否是office文档???? 已知一个文件的文件名及扩展名,如何判断它是否office文档..不要告诉我只能列举扩展名然后再比较T_T 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 找找相关word文件的结构研究一下.我有:[email protected] 给我一份[email protected]谢谢!!! Office文件都是使用结构化存储复合文件(Structured Storage, Compound File),可以从它们的文件属性里面取得创建的应用程序,例如,在文件属性对话框当中的Summary一页有定义Application Name,可以看到文件使用Excel或者Word创建的。但是在dotNet程序读取这些信息比较麻烦:1)需要声明StgOpenStorageEx函数,包括参数的结构和常量定义。2) 需要声明IPropertySetStorage,IPropertyStorage和IEnumSTATPROPSTG COM接口。3) 定义Summary Information property set的FMTID:F29F85E0-4FF9-1068-AB91-08002B27B3D9。4)通过StgOpenStorageEx打开文件,取得IPropertySetStorage.5) 从IPropertySetStorage调用Open函数,打开Summary Information property set,取得IPropertyStorage,然后调用Enum取得IEnumSTATPROPSTG。6)列举所有的Property,直到取得Property ID = 0x12 (Creating Application),如果名字是Excel或者Word,那么是Office文件。 worst part, 我没有找到一个比较完整的C#/.NET的Structure Storage的例子。:(如果你有兴趣的话可以自己尝试一下。:) 列举扩展名然后再比较还是一个好办法,不过看有没有对象可以获取ms office的后缀列表 to qqchen79(知秋一叶 [MS MVP]) :多谢,试试先 列举扩展名然后再比较还是一个好办法,不过看有没有对象可以获取ms office的后缀列表-------------------------------------------------------------------------------好像没有这种东东:( http://blog.joycode.com/qqchen/archive/2004/08/04/29513.aspx写了一个例子程序。 to qqchen79(知秋一叶 [MS MVP]):程序我试过了,但是就算是word文档仍然显示create IPropertySetStorage failed! File is not an Office document.?????? 我试过了PPT,Excel和Word文件,应该没有问题啊。你是只有一个Word文件会Fail还是所有的Office文件?如果只有一个文件Fail,把它发给我:qqchen79 AT yahoo DOT com 多半是通过文件头判断的读前几个字节即可word, Excel ,PPT 好像是 D0 CF 11 EO A1 B1 1A E1 开头的 后边有个地方不同Access重第五个字节有个 "Standard Jet" 串jpg FF D8 FF EO OO 10 4A 46 49 46Photoshop 开头有个 "8BPS"对于任何2进制文件找个软件如 ultraEdit32 什么的看看 头有何区别就行然后再代码里读一部分文件转 byte[] 即可判断出来!也就能这样的,如果有人恶意修改文件头也没办法,就算是 word 本身你修改了文件头他就不认被也没别的办法! 一般判断文件格式的方法是检查文件头没错,但是和BMP,JPG或者RTF格式不同,Microsoft没有公开Office文件的格式。取得Office文档的格式定义需要微软的授权。而且微软可以随时修改上面的头信息,所以这种做法未必可靠。当然,上面的Structure Storage的方式也不能保证100%的可靠,但我相信其稳定程度要稍微高一些。 amoxicillin1030(BOBO~菜): 我又尝试了不少Office文件,都没有问题。:( 为什么每次都返回:create IPropertySetStorage failed! File is not an Office document.谢谢 求“优化数据”的方法!!! C#中Winform生成Excel? 读取Excel数据出错,请求帮助 请教一个读取XML文件的问题 问个office2000与03冲突的问题 一个比较菜鸟级的问题,帮忙指点~~ 谢谢各位~~~ 用什么方法 把控件停靠再窗替右侧?? 返回函数那里错了?? 如何在.net程序中接收windows消息 第三方控件DevComponents.DotNetBar里的advTree控件刷新节点问题 未处理的“System.Data.SqlClient.SqlException”类型的异常出现在 system.data.dll 请想要c#程序的网友进来看看
谢谢!!!
1)需要声明StgOpenStorageEx函数,包括参数的结构和常量定义。
2) 需要声明IPropertySetStorage,IPropertyStorage和IEnumSTATPROPSTG COM接口。
3) 定义Summary Information property set的FMTID:F29F85E0-4FF9-1068-AB91-08002B27B3D9。
4)通过StgOpenStorageEx打开文件,取得IPropertySetStorage.
5) 从IPropertySetStorage调用Open函数,打开Summary Information property set,取得IPropertyStorage,然后调用Enum取得IEnumSTATPROPSTG。
6)列举所有的Property,直到取得Property ID = 0x12 (Creating Application),如果名字是Excel或者Word,那么是Office文件。
如果你有兴趣的话可以自己尝试一下。:)
-------------------------------------------------------------------------------
好像没有这种东东:(
写了一个例子程序。
你是只有一个Word文件会Fail还是所有的Office文件?如果只有一个文件Fail,把它发给我:
qqchen79 AT yahoo DOT com
读前几个字节即可
word, Excel ,PPT 好像是 D0 CF 11 EO A1 B1 1A E1 开头的 后边有个地方不同
Access重第五个字节有个 "Standard Jet" 串
jpg FF D8 FF EO OO 10 4A 46 49 46
Photoshop 开头有个 "8BPS"
对于任何2进制文件找个软件如 ultraEdit32 什么的看看 头有何区别就行
然后再代码里读一部分文件
转 byte[] 即可判断出来!也就能这样的,如果有人恶意修改文件头也没办法,就算是 word 本身你修改了文件头他就不认被也没别的办法!
amoxicillin1030(BOBO~菜):
我又尝试了不少Office文件,都没有问题。:(
create IPropertySetStorage failed! File is not an Office document.
谢谢