Detect File Format ו- Check Compatibility

לפעמים יש צורך לקבוע את פורמט המסמך לפני הפתיחה, כי הרחבה הקובץ אינה מבטיחה כי התוכן של הקובץ מתאים. לדוגמה, ידוע כי דוחות קריסטל לעתים קרובות מפיקים מסמכים בפורמט RTF, אבל נותן להם את הסיומת.doc.

Aspose.Words מספק יכולת לקבל מידע על סוג הקובץ כדי למנוע חריג אם אתה לא בטוח מה התוכן האמיתי של הקובץ.

תבנית קובץ Detect ללא יוצא דופן

כאשר אתה מתמודד עם מסמכים מרובים בפורמטים שונים של קבצים, ייתכן שתצטרך להפריד קבצים אלה שניתן לעבד על ידי Aspose.Words מאלה שלא יכולים. אתה יכול גם לדעת מדוע חלק מהמסמכים לא ניתן לעבד.

אם אתה מנסה לטעון קובץ לתוך קובץ Document אובייקט ו Aspose.Words לא יכול לזהות את פורמט הקובץ או את התבנית לא נתמך. Aspose.Words לזרוק יוצא מן הכלל. אתה יכול לתפוס את החריגים האלה לנתח אותם, אבל Aspose.Words גם מספק DetectFileFormat שיטה המאפשרת לנו לקבוע במהירות את תבנית הקובץ מבלי לטעון מסמך עם חריגים אפשריים. שיטה זו מחזירה FileFormatInfo אובייקט המכיל את המידע מזוהה על סוג הקובץ.

עקבו אחרי Files Compatibility

אנו יכולים לבדוק את תאימות הפורמט של כל הקבצים בתיקיה שנבחרה ולמיין אותם על ידי פורמט לתוך מכפליים מקבילים.

מכיוון שאנו מתמודדים עם תוכן בתיקיה, הדבר הראשון שאנחנו צריכים לעשות הוא לקבל אוסף של כל הקבצים בתיקיה זו באמצעות שימוש בקובץ. GetFiles שיטת Directory מעמד (מתוך System.IO שם מקום).

לדוגמה הקוד הבא מראה כיצד לקבל רשימה של כל הקבצים בתיקיה:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// We have a corrupted document for one of the examples in our folder, so exclude it from our collection.
IEnumerable<string> fileList = Directory.GetFiles(MyDir).Where(name => !name.EndsWith("Corrupted document.docx"));

כאשר כל הקבצים נאספים, שאר העבודה מתבצעת על ידי DetectFileFormat שיטה, אשר בודקת את תבנית הקובץ.

הדוגמה הבאה של הקוד מראה כיצד להחליש מעל רשימת הקבצים שנאספו, לבדוק את התבנית של כל קובץ, ומעביר כל קובץ לתיקיה המתאימה:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
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);
// We have a corrupted document for one of the examples in our folder, so exclude it from our collection.
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);
// Display the document type.
FileFormatInfo info = FileFormatUtil.DetectFileFormat(fileName);
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;
}
}
}

הקבצים מועברים למכפירים המתאימים באמצעות Move שיטת File מעמד, מאותו System.IO שם.

הקבצים הבאים משמשים בדוגמה לעיל. שם הקובץ בצד שמאל והתיאור שלו מימין:

Group קבצים Input Document סוג
פורמטים קובץ מבחן (Doc)doc Microsoft Word 95/6.0 Microsoft Word 97 - 2003 מסמך
File (Dot(Dot) Microsoft Word 95/6.0 Microsoft Word 97 - 2003 תבנית
File File (Docx)docx Office Open XML Wordprocessing מסמך ML ללא מאקרו
File File (DoCM) Office Open XML Wordprocessing ML מסמך עם מאקרו
תגית: dotx Office Open XML Wordprocessing תבנית ML
תגית: Dotm Office Open XML Wordprocessing תבנית ML עם מאקרו
תגית: XML מסמך FlatOPC OOXML
תגית:RTF מסמך פורמט טקסט עשיר
שם הסרטון:WordML Microsoft Word 2003 Wordprocessing מסמך ML
File File (HTML)html מסמך HTML
מבחן (MHTML)mhtml מסמך MHTML (ארכיון אינטרנט)
מבחן (Odt) OpenDocument Text (OpenOffice Writer)
מבחן (Ot) קוד פתוח
מבחן (DocPreWord60).doc Microsoft Word 2.0 מסמך
מסמכים מוצפנים מבחן (Enc)doc הצפנה Microsoft Word 95/6.0 Microsoft Word 97 - 2003 מסמך
מבחן (Enc)docx Office Open XML Wordprocessing מסמך ML
פורמטים קובץ לא נתמך תגית: JPG jpg קובץ JPEG