【发布时间】:2010-07-10 22:15:32
【问题描述】:
我正在使用 Microsoft.Office.Interop.Word 命名空间中的 Documents.Open 方法打开 word 文档。这很好用,除了当我打开一个不是 word 文档的文件时,它会自动转换为 word 文档。我想找到一种方法来引发文档不是word文档的异常,在打开文档之前检测文档是否是word文档,或者检测文档是否在之后转换打开并转换。有人对如何实现这一点有任何想法吗?
【问题讨论】:
我正在使用 Microsoft.Office.Interop.Word 命名空间中的 Documents.Open 方法打开 word 文档。这很好用,除了当我打开一个不是 word 文档的文件时,它会自动转换为 word 文档。我想找到一种方法来引发文档不是word文档的异常,在打开文档之前检测文档是否是word文档,或者检测文档是否在之后转换打开并转换。有人对如何实现这一点有任何想法吗?
【问题讨论】:
一个简单的测试是在尝试使用 Word 打开文档之前检查文档文件头中的幻数。
二进制 Word 文档 (.doc) 是复合文档,以 0xcfd0 开头,而 OpenXML 文档 (.docx) 以字符串“PK”开头。
static bool HasComoundDocumentSignature(string filename)
{
using (BinaryReader br = new BinaryReader(File.Open(filename, FileMode.Open)))
{
UInt16 magicNumber = br.ReadUInt16();
return magicNumber == 0xcfd0;
}
}
static bool HasZipSignature(string filename)
{
using (BinaryReader br = new BinaryReader(File.Open(filename, FileMode.Open)))
{
UInt16 magicNumber = br.ReadUInt16();
return magicNumber == 0x4b50;
}
}
static bool HasWordSignature(string filename)
{
return HasCompoundDocumentSignature(filename)
|| HasZipSignature(filename);
}
【讨论】: