检查word模板文件

时间:2009-05-25 05:59:40

标签: c# .net ms-word

如何查看单词模板文件。可以使用扩展名.dot或.dotx进行检查。 但是如果用户将.txt更改为.dot。怎么能确定?

4 个答案:

答案 0 :(得分:1)

要检查dotx文件(实际上是一个zip文件),请检查标题:

0000000: 504b 0304 1400 0000 0800 95a1 3435 4a07  PK..........45J.

前四个字节是0x050 0x4b 0x03 0x04。这将证明文件是否是zip文件(因此不一定是dotx),如果您想进一步检查,则需要解压缩整个缓冲区并解析生成的XML。

要检查点文件(2007年之前),请检查标题:

0000000: d0cf 11e0 a1b1 1ae1 0000 0000 0000 0000  ................

前八个字节0xd0 0xcf 0x11 0xe0 0xa1 0xb1 0x1a 0xe1

因此对于其中任何一种情况,以二进制模式打开文件,读取前八个字节并进行比较。

答案 1 :(得分:1)

根据http://www.garykessler.net/library/file_sigs.html,点文件(以及其他)的完整签名是:

D0 CF 11 E0 A1 B1 1A E1

因此,下面是一些代码。它适用于.dot,但如果你想检查.dotx,你可以实现类似的代码。这并不能绝对保证它是一个有效的点,所以你仍然需要在以后合理地处理错误。

// Use this as a class field.
private static readonly byte[] DOT_SIGNATURE = new byte[]{0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1};

稍后,当你真正拥有Stream时:

bool isDot = true;

Stream dotStream = ...
byte[] firstBytes = new byte[DOT_SIGNATURE.Length];
int totalRead = 0, curRead;

while(totalRead < DOT_SIGNATURE.Length)
{
    curRead = dotStream.Read(firstBytes, totalRead, DOT_SIGNATURE.Length - totalRead);
    if(curRead == 0)
    {
            isDot = false;                
            break; // Premature end of stream;
    }

    totalRead += curRead;
}

if(isDot)
{
    for(int i = 0; isDot && i < DOT_SIGNATURE.Length; i++)
    {
            // If isDot becomes false, arrays are not equal and we break out.
            isDot = (firstBytes[i] == DOT_SIGNATURE[i]);
    }
}

dotStream.Seek(0, SeekOrigin.Begin);

答案 2 :(得分:0)

检查文件签名,.dot文件应该以D0 CF .....

开头

答案 3 :(得分:0)

.dotx文件只是一个ZIP文件,所以你可以检查它是否以“PK”(zip标题)开头,然后你需要完全解压缩文件并检查内容是否是有效的Word模板。