Word API: предотвращение преобразования файла - PullRequest
2 голосов
/ 11 июля 2010

Я открываю документы Word с помощью метода Documents.Open в пространстве имен Microsoft.Office.Interop.Word. Это прекрасно работает, за исключением того, что когда я открываю файл, который не является документом Word, он автоматически преобразуется в документ Word. Я хотел бы найти способ поднять исключение из документа, не являющегося документом Word, определить, является ли документ документом Word или нет, до его открытия, или определить, был ли документ преобразован после открыт и преобразован. У кого-нибудь есть идеи о том, как этого добиться?

1 Ответ

3 голосов
/ 11 июля 2010

Простым тестом будет проверка магического числа в заголовке файла документа перед попыткой открыть документ с помощью 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); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...