已知一个文件的文件名及扩展名,如何判断它是否office文档..
不要告诉我只能列举扩展名然后再比较T_T

解决方案 »

  1.   

    找找相关word文件的结构研究一下.我有:[email protected]
      

  2.   

    给我一份[email protected]
    谢谢!!!
      

  3.   

    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文件。
      

  4.   

    worst part, 我没有找到一个比较完整的C#/.NET的Structure Storage的例子。:(
    如果你有兴趣的话可以自己尝试一下。:)
      

  5.   

    列举扩展名然后再比较还是一个好办法,不过看有没有对象可以获取ms office的后缀列表
      

  6.   

    to  qqchen79(知秋一叶 [MS MVP]) :多谢,试试先
      

  7.   

    列举扩展名然后再比较还是一个好办法,不过看有没有对象可以获取ms office的后缀列表
    -------------------------------------------------------------------------------
    好像没有这种东东:(
      

  8.   

    http://blog.joycode.com/qqchen/archive/2004/08/04/29513.aspx
    写了一个例子程序。
      

  9.   

    to qqchen79(知秋一叶 [MS MVP]):程序我试过了,但是就算是word文档仍然显示create IPropertySetStorage failed! File is not an Office document.??????
      

  10.   

    我试过了PPT,Excel和Word文件,应该没有问题啊。
    你是只有一个Word文件会Fail还是所有的Office文件?如果只有一个文件Fail,把它发给我:
    qqchen79 AT yahoo DOT com
      

  11.   

    多半是通过文件头判断的
    读前几个字节即可
    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 本身你修改了文件头他就不认被也没别的办法!
      

  12.   

    一般判断文件格式的方法是检查文件头没错,但是和BMP,JPG或者RTF格式不同,Microsoft没有公开Office文件的格式。取得Office文档的格式定义需要微软的授权。而且微软可以随时修改上面的头信息,所以这种做法未必可靠。当然,上面的Structure Storage的方式也不能保证100%的可靠,但我相信其稳定程度要稍微高一些。
      
    amoxicillin1030(BOBO~菜):
      我又尝试了不少Office文件,都没有问题。:(
      

  13.   

    为什么每次都返回:
    create IPropertySetStorage failed! File is not an Office document.
    谢谢