فرمت فایل را شناسایی کنید و سازگاری فرمت را بررسی کنید
گاهی اوقات لازم است قبل از باز کردن یک سند، فرمت آن مشخص شود، زیرا پسوند فایل تضمین نمی کند که محتوای فایل مناسب است. به عنوان مثال، مشخص است که 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 سند XML WordprocessingML را با ماکروها باز کنید. | |
فایل تست (Dotx).dotx | قالب Office Open XML WordprocessingML. | |
فایل تست (Dotm).dotm | Office Open XML WordprocessingML قالب با ماکرو. | |
فایل تست (XML).xml | سند FlatOPC OOXML. | |
فایل تست (RTF).rtf | سند با فرمت متن غنی | |
فایل تست (WordML).xml | سند WordprocessingML Microsoft Word 2003. | |
فایل تست (HTML).html | سند HTML | |
فایل تست (MHTML).mhtml | سند MHTML (بایگانی وب). | |
فایل تست (Odt).odt | متن OpenDocument (OpenOffice Writer). | |
فایل تست (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 |