我正在使用Microsoft.Office.Interop.Word命名空间中的Documents.Open方法打开word文档。这很好用,除了当我打开一个不是word文档的文件时,它会自动转换为word文档。我想找到一种方法来引发文档的异常不是word文档,在打开文档之前检测文档是否是文档文档,或者检测文档是否在文档被转换之后打开并转换。有没有人对如何做到这一点有任何想法?
答案 0 :(得分:3)
一个简单的测试是在尝试用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);
}