Detectează formatul fișierului și compatibilitatea formatului
Uneori este necesar să determini formatul unui document înainte de deschidere, deoarece extensia fișierului nu garantează că conținutul fișierului este potrivit. De exemplu se ştie că Crystal Reports adesea scoate documente în format RTF dar le dă extensia .doc.
Aspose.Words oferă posibilitatea de a obține informații despre tipul fișierului pentru a evita o excepție dacă nu sunteți siguri de conținutul real al fișierului.
Detectează formatul fișierului fără excepție
Când tratezi cu mai multe documente în diferite formate de fișiere ai nevoie să separi acele fișiere care pot fi procesate de Aspose.Words de cele care nu pot. Vă puteți dori, de asemenea, să știți de ce unele documente nu pot fi procesate.
Dacă încerci să încarci un fişier într-un obiect Document şi Aspose.Words nu poate recunoaşte formatul fişierului sau formatul nu este acceptat, Aspose.Words va arunca o excepţie. Puteți captura aceste excepții și le puteți analiza, dar Aspose.Words oferă, de asemenea, metoda DetectFileFormat care ne permite să determinăm rapid formatul fișierului fără a încărca un document cu posibile excepții. Această metodă returnează un obiect FileFormatInfo care conține informațiile detectate despre tipul de fişier.
Verifica compatibilitatea formatelor fișierelor
Putem verifica compatibilitatea formatului tuturor fișierelor din folderul selectat și le putem sorta după format în subfolderele corespunzătoare.
Din moment ce lucrăm cu conținut într-un folder, primul lucru pe care trebuie să-l facem este să obținem o colecție de toate fișierele din acest folder folosind metoda GetFiles a clasei Directory
(din spațiul de nume System.IO
).
Exemplul următor de cod arată cum să obții o listă cu toate fișierele din dosar:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
IEnumerable<string> fileList = Directory.GetFiles(MyDir).Where(name => !name.EndsWith("Corrupted document.docx")); |
Când toate fișierele sunt colectate, restul muncii este făcut de DetectFileFormat metoda care verifică formatul fișierului.
Exemplul de cod de mai jos arată cum să parcurgem lista colectată de fișiere, să verificăm formatul fiecărui fișier și să mutăm fiecare fișier în folderul corespunzător:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
string supportedDir = ArtifactsDir + "Supported"; | |
string unknownDir = ArtifactsDir + "Unknown"; | |
string encryptedDir = ArtifactsDir + "Encrypted"; | |
string pre97Dir = ArtifactsDir + "Pre97"; | |
// Create the directories if they do not already exist. | |
if (Directory.Exists(supportedDir) == false) | |
Directory.CreateDirectory(supportedDir); | |
if (Directory.Exists(unknownDir) == false) | |
Directory.CreateDirectory(unknownDir); | |
if (Directory.Exists(encryptedDir) == false) | |
Directory.CreateDirectory(encryptedDir); | |
if (Directory.Exists(pre97Dir) == false) | |
Directory.CreateDirectory(pre97Dir); | |
IEnumerable<string> fileList = Directory.GetFiles(MyDir).Where(name => !name.EndsWith("Corrupted document.docx")); | |
foreach (string fileName in fileList) | |
{ | |
string nameOnly = Path.GetFileName(fileName); | |
Console.Write(nameOnly); | |
FileFormatInfo info = FileFormatUtil.DetectFileFormat(fileName); | |
// Display the document type | |
switch (info.LoadFormat) | |
{ | |
case LoadFormat.Doc: | |
Console.WriteLine("\tMicrosoft Word 97-2003 document."); | |
break; | |
case LoadFormat.Dot: | |
Console.WriteLine("\tMicrosoft Word 97-2003 template."); | |
break; | |
case LoadFormat.Docx: | |
Console.WriteLine("\tOffice Open XML WordprocessingML Macro-Free Document."); | |
break; | |
case LoadFormat.Docm: | |
Console.WriteLine("\tOffice Open XML WordprocessingML Macro-Enabled Document."); | |
break; | |
case LoadFormat.Dotx: | |
Console.WriteLine("\tOffice Open XML WordprocessingML Macro-Free Template."); | |
break; | |
case LoadFormat.Dotm: | |
Console.WriteLine("\tOffice Open XML WordprocessingML Macro-Enabled Template."); | |
break; | |
case LoadFormat.FlatOpc: | |
Console.WriteLine("\tFlat OPC document."); | |
break; | |
case LoadFormat.Rtf: | |
Console.WriteLine("\tRTF format."); | |
break; | |
case LoadFormat.WordML: | |
Console.WriteLine("\tMicrosoft Word 2003 WordprocessingML format."); | |
break; | |
case LoadFormat.Html: | |
Console.WriteLine("\tHTML format."); | |
break; | |
case LoadFormat.Mhtml: | |
Console.WriteLine("\tMHTML (Web archive) format."); | |
break; | |
case LoadFormat.Odt: | |
Console.WriteLine("\tOpenDocument Text."); | |
break; | |
case LoadFormat.Ott: | |
Console.WriteLine("\tOpenDocument Text Template."); | |
break; | |
case LoadFormat.DocPreWord60: | |
Console.WriteLine("\tMS Word 6 or Word 95 format."); | |
break; | |
case LoadFormat.Unknown: | |
Console.WriteLine("\tUnknown format."); | |
break; | |
} | |
if (info.IsEncrypted) | |
{ | |
Console.WriteLine("\tAn encrypted document."); | |
File.Copy(fileName, Path.Combine(encryptedDir, nameOnly), true); | |
} | |
else | |
{ | |
switch (info.LoadFormat) | |
{ | |
case LoadFormat.DocPreWord60: | |
File.Copy(fileName, Path.Combine(pre97Dir, nameOnly), true); | |
break; | |
case LoadFormat.Unknown: | |
File.Copy(fileName, Path.Combine(unknownDir, nameOnly), true); | |
break; | |
default: | |
File.Copy(fileName, Path.Combine(supportedDir, nameOnly), true); | |
break; | |
} | |
} | |
} |
Fișierele sunt mutate în subfoldere adecvate folosind metoda Move
a clasei File
, din același spațiu de nume System.IO
.
Următoarele fișiere sunt folosite în exemplul de mai sus. Numele fișierului este pe stânga și descrierea sa este pe dreapta:
Group din fișiere | Document de intrare | Tip |
---|---|---|
Formatelor de fișiere suportate | Test File (Doc).doc | Microsoft Word 95/6.0 sau Microsoft Word 97 - 2003 document. |
Test File (Dot ).dot |
Microsoft Word 95/6.0 sau Microsoft Word 97-2003 șablon. | |
Test File (Docx).docx | Office Open XML WordprocessingML document fără macro comenzi. | |
Test File (Docm)".docm | Document de procesare a textului Office Open XML cu macro-uri. | |
Test File (Dotx).dotx | Office Open XML WordprocessingML șablon. | |
Test File (Dotm).dotm | Office Open XML WordprocessingML șablon cu macro-uri. | |
Test File (XML).xml | Document FlatOPC OOXML. | |
Test File (RTF) | Documente în format RichText. | |
Test File (WordML).xml | Microsoft Word 2003 WordprocessingML document. | |
Test File (HTML).html | Document HTML. | |
Test File (MHTML).mhtml | Document de arhivă web. | |
Test File (Odt)".odt | OpenDocument Text (OpenOffice Writer). | |
Test fișier (Ott). ott | OpenDocument Template. | |
Fișier Test (DocPreWord60). doc | Microsoft Word 2.0 document. | |
Documente criptate | Test File (Enc). doc | Encryptat Microsoft Word 95/6.0 sau Microsoft Word 97 – 2003 document. |
Test File (Enc).docx | Document Microsoft Office Open XML criptat WordprocessingML. | |
Formate de fişier neacceptate | Test File (JPG).jpg | Fișier imagine JPEG. |