word、excel文件判断有关问题

word、excel文件判断问题
在C++     builder中怎么判断某个文件是不是真正的word或者excel。比如现在有个test.txt文件,通过修改后缀,把它改成test.doc,此时应该能判断出test.doc不是word文件。请问要怎么实现?

------解决方案--------------------
一般是用判断文件头的方式来判断文件格式(当然不是100%有效)

刚才大概研究了一下,貌似这样:

打开要判断的文件,读取文件头前八个字节,判断是否为 D0 CF 11 E0 A1 B1 1A E1,如果是则为Word文档或Excel文档。
再判断第0x30字节,如果为0x26则是.Doc格式,0x01则是.xls格式。

不知道是否准确。楼主自己实验一下。
------解决方案--------------------
用ultraedit查看了几个文件,发现前48个字节是不变的:
00000000h: D0 CF 11 E0 A1 B1 1A E1 00 00 00 00 00 00 00 00 ; 邢.唷??.......
00000010h: 00 00 00 00 00 00 00 00 3E 00 03 00 FE FF 09 00 ; ........> ...?..
00000020h: 06 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 ; ................
可是之后的某写字节就不太一样了,老妖说的0x30字节为0x26则是.Doc格式,可是查看两个几个都不是这个值。
(1)
00000030h: 11 00 00 00 00 00 00 00 00 10 00 00 12 00 00 00 ;
00000040h: 01 00 00 00 FE FF FF FF 00 00 00 00 10 00 00 00 ; ; 
(2)
00000030h: 77 00 00 00 00 00 00 00 00 10 00 00 7A 00 00 00 ;
00000040h: 01 00 00 00 FE FF FF FF 00 00 00 00 78 00 00 00 ;


------解决方案--------------------
我想只有判断文件头吧,看有没有其他资料
------解决方案--------------------
学习一下
------解决方案--------------------
我想只有判断文件头吧,
------解决方案--------------------
可以用 结构化存储 技术来判断,StgOpenStorage 打开文件,ReadClassStg 获取 CLSID, 看看是等于“{00020906-0000-0000-C000-000000000046}”(用IsEqualGUID比较)

------解决方案--------------------
{00020906-0000-0000-C000-000000000046} 是Word的,在BCB 中是 TGUID 类型。

Excel, PowerPoint啥的 CLSID 可以查注册表德到,都是固定值。