2010-07-10 8 views
2

J'ouvre des documents Word avec la méthode Documents.Open dans l'espace de noms Microsoft.Office.Interop.Word. Cela fonctionne bien, sauf que lorsque j'ouvre un fichier qui n'est pas un document Word, il est automatiquement converti en un document Word. Je voudrais trouver un moyen de lever une exception du document n'est pas un document Word, détecter si le document est ou n'est pas un document Word avant de l'ouvrir, ou détecter si le document a été converti après qu'il est ouvert et converti. Est-ce que quelqu'un a des idées sur la façon d'accomplir cela?API Word: empêcher la conversion du fichier

Répondre

3

Un test simple serait de vérifier le nombre magique dans l'en-tête du document avant d'essayer d'ouvrir le document avec Word.

Les documents Word binaires (.doc) sont des documents composés et commencent par 0xcfd0, où les documents OpenXML (.docx) commencent par la chaîne "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); 
} 
+0

Je sais que c'est assez proche, mais je ne voulais pas aller avec quelque chose comme cela comme une solution parce que tout fichier zip devrait être en mesure de passer ce test, il est donc pas nécessairement une indication que le fichier est Fichier Word Je cherche vraiment quelque chose dans l'API qui me donnera un indice sur les conversions effectuées sur le fichier lors de son ouverture. – jcnnghm

+0

@jcnnghm: Oui, bien sûr que ce n'est pas à l'épreuve des balles. Si vous trouvez un fichier zip, vous devrez l'ouvrir et vérifier le fichier _rels \ .rels, et analyser le XML de cette partie du paquet pour voir s'il contient une relation de type "http://schemas.openxmlformats.org/ officeDocument/2006/relations/officeDocument ". –

Questions connexes