ตรวจจับรูปแบบไฟล์และตรวจสอบความเข้ากันได้ของรูปแบบ

บางครั้งจำเป็นต้องกำหนดรูปแบบของเอกสารก่อนเปิด เนื่องจากนามสกุลไฟล์ไม่ได้รับประกันว่าเนื้อหาของไฟล์จะมีความเหมาะสม ตัวอย่างเช่น เป็นที่ทราบกันว่า Crystal Reports มักจะส่งออกเอกสารในรูปแบบ RTF แต่ให้นามสกุล .doc แก่พวกเขา

Aspose.Words ให้ความสามารถในการรับข้อมูลเกี่ยวกับประเภทไฟล์เพื่อหลีกเลี่ยงข้อยกเว้น หากคุณไม่แน่ใจว่าเนื้อหาที่แท้จริงของไฟล์นั้นคืออะไร

ตรวจจับรูปแบบไฟล์โดยไม่มีข้อยกเว้น

เมื่อคุณจัดการกับเอกสารหลายฉบับในรูปแบบไฟล์ต่างๆ คุณอาจต้องแยกไฟล์ที่ Aspose.Words ประมวลผลได้ออกจากไฟล์ที่ไม่สามารถทำได้ คุณอาจต้องการทราบว่าเหตุใดเอกสารบางรายการจึงไม่สามารถประมวลผลได้

หากคุณพยายามโหลดไฟล์ลงในออบเจ็กต์ Document และ Aspose.Words ไม่รู้จักรูปแบบไฟล์หรือไม่รองรับรูปแบบนั้น Aspose.Words จะส่งข้อยกเว้น คุณสามารถตรวจจับข้อยกเว้นเหล่านั้นและวิเคราะห์ได้ แต่ Aspose.Words ยังมีวิธี DetectFileFormat ที่ช่วยให้เราสามารถระบุรูปแบบไฟล์ได้อย่างรวดเร็วโดยไม่ต้องโหลดเอกสารที่มีข้อยกเว้นที่เป็นไปได้ เมธอดนี้ส่งคืนออบเจ็กต์ FileFormatInfo ที่มีข้อมูลที่ตรวจพบเกี่ยวกับประเภทไฟล์

ตรวจสอบความเข้ากันได้ของรูปแบบไฟล์

เราสามารถตรวจสอบความเข้ากันได้ของรูปแบบไฟล์ทั้งหมดในโฟลเดอร์ที่เลือกและจัดเรียงตามรูปแบบในโฟลเดอร์ย่อยที่เกี่ยวข้อง

เนื่องจากเรากำลังจัดการกับเนื้อหาในโฟลเดอร์ สิ่งแรกที่เราต้องทำคือรวบรวมไฟล์ทั้งหมดในโฟลเดอร์นี้โดยใช้วิธี 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 ของไฟล์ เอกสารเข้า พิมพ์
รูปแบบไฟล์ที่รองรับ ไฟล์ทดสอบ (Doc).doc เอกสาร Microsoft Word 95/6.0 หรือ Microsoft Word 97 – 2003
ไฟล์ทดสอบ (Dot).dot เทมเพลต Microsoft Word 95/6.0 หรือ Microsoft Word 97 – 2003
ไฟล์ทดสอบ (Docx).docx เอกสาร Office Open XML WordprocessingML ที่ไม่มีมาโคร
ไฟล์ทดสอบ (Docm).docm เอกสาร Office Open XML WordprocessingML พร้อมมาโคร
ไฟล์ทดสอบ (Dotx).dotx เทมเพลต Office Open XML WordprocessingML
ไฟล์ทดสอบ (Dotm).dotm เทมเพลต Office Open XML WordprocessingML พร้อมมาโคร
ไฟล์ทดสอบ (XML).xml เอกสาร FlatOPC OOXML
ไฟล์ทดสอบ (RTF).rtf เอกสารรูปแบบ Rich Text
ไฟล์ทดสอบ (WordML).xml เอกสาร Microsoft Word 2003 WordprocessingML
ไฟล์ทดสอบ (HTML).html เอกสาร HTML
ไฟล์ทดสอบ (MHTML).mhtml เอกสาร MHTML (เว็บเก็บถาวร)
ไฟล์ทดสอบ (Odt).odt ข้อความ OpenDocument (นักเขียน OpenOffice)
ไฟล์ทดสอบ (Ott).ott เทมเพลตเอกสาร OpenDocument
ไฟล์ทดสอบ (DocPreWord60).doc เอกสาร Microsoft Word 2.0
เอกสารที่เข้ารหัส ไฟล์ทดสอบ (Enc).doc เอกสาร Microsoft Word 95/6.0 หรือ Microsoft Word 97 – 2003 ที่เข้ารหัส
ไฟล์ทดสอบ (Enc).docx เอกสาร Office Open XML WordprocessingML ที่เข้ารหัส
รูปแบบไฟล์ที่ไม่รองรับ ไฟล์ทดสอบ (JPG).jpg ไฟล์ภาพ JPEG