2009-05-25 9 views
1

Comment puis-je vérifier un fichier de modèle Word? Il peut être vérifié en utilisant l'extension .dot ou .dotx. Mais si l'utilisateur a modifié un fichier .txt en .dot. Comment pourrait-il être identifié ??Vérifier le fichier modèle Word

+0

Vous devez clarifier la question. Demandez-vous comment utiliser C# pour déterminer si un fichier est un modèle de mot en regardant à l'intérieur du fichier? –

+0

Oui M. Thompson. J'en ai besoin en utilisant le codage C#. – Sauron

Répondre

1

Pour vérifier un fichier dotx (qui est en fait un fichier zip), vérifiez l'en-tête:

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

Les quatre premiers octets sont 0x050 0x4B 0x03 0x04. Cela démontrera si un fichier est un fichier zip (donc pas nécessairement un dotx), si vous voulez vérifier plus loin, vous devrez décompresser le tampon entier et analyser le XML résultant.

Pour vérifier un fichier de points (avant 2007), vérifiez l'en-tête:

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

huit premiers octets 0xD0 0xCF 0x11 0xE0 0xA1 0xB1 0x1a 0xE1

Donc, pour l'un de ces cas, ouvrez le fichier en mode binaire, lire les huit premiers octets et comparer.

+1

Il est logique d'utiliser toute la signature, qui est de 4 octets pour les zips, et 8 pour le point. –

+1

Merci Matthew, j'ai mis à jour pour refléter votre suggestion. – RedBlueThing

0

vérifier la signature du fichier, le fichier .dot doit commencer par D0 CF .....

+1

Pourriez-vous s'il vous plaît développer votre réponse. – Sauron

0

Un fichier .dotx est juste un fichier ZIP, de sorte que vous pouvez vérifier si elle commence par « PK » (en-tête zip), vous devrez décompresser complètement le fichier et vérifier si le contenu est un modèle Word valide.

+0

Pouvez-vous donner un code? – Sauron

1

Selon http://www.garykessler.net/library/file_sigs.html, la signature complète d'un fichier de points (entre autres) est:

D0 CF 11 A1 B1 1A E0 E1

Donc, ci-dessous est un code pour commencer. Cela fonctionne pour .dot, mais si vous voulez vérifier .dotx, vous pouvez implémenter un code similaire. Cela ne garantit pas absolument qu'il s'agit d'un point valide, vous devez donc gérer les erreurs raisonnablement plus tard.

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

Plus tard, quand vous avez réellement 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); 
+0

Pouvez-vous me donner la signature d'un fichier dotx? – Sauron

+1

Étant donné que les fichiers dotx sont des fichiers zip, la signature est 50 4B 03 04 (voir http://members.tripod.com/~petlibrary/ZIP.HTM). Cependant, évidemment, tous les fichiers zip ne sont pas dotx. –

Questions connexes