كشف تنسيق الملف والتحقق من توافق التنسيق
في بعض الأحيان يكون من الضروري تحديد تنسيق المستند قبل الفتح لأن امتداد الملف لا يضمن أن محتويات الملف مناسبة. على سبيل المثال، فمن المعروف أن تقارير كريستال في كثير من الأحيان مخرجات الوثائق في RTF شكل, ولكن يعطيها .ملحق الوثيقة.
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-C | |
System::ArrayPtr<System::String> fileList = System::IO::Directory::GetFiles(dataDir); |
عندما يتم جمع جميع الملفات، يتم تنفيذ بقية العمل بواسطة طريقة DetectFileFormat، والتي تتحقق من تنسيق الملف.
يوضح مثال التعليمات البرمجية التالية كيفية التكرار عبر قائمة الملفات المجمعة، والتحقق من تنسيق كل ملف، ونقل كل ملف إلى المجلد المناسب:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// The path to the documents directory. | |
System::String dataDir = GetInputDataDir_LoadingAndSaving(); | |
System::String supportedDir = dataDir + u"Supported_out"; | |
System::String unknownDir = dataDir + u"Unknown_out"; | |
System::String encryptedDir = dataDir + u"Encrypted_out"; | |
System::String pre97Dir = dataDir + u"Pre97_out"; | |
// Create the directories if they do not already exist | |
if (!System::IO::Directory::Exists(supportedDir)) | |
{ | |
System::IO::Directory::CreateDirectory_(supportedDir); | |
} | |
if (!System::IO::Directory::Exists(unknownDir)) | |
{ | |
System::IO::Directory::CreateDirectory_(unknownDir); | |
} | |
if (!System::IO::Directory::Exists(encryptedDir)) | |
{ | |
System::IO::Directory::CreateDirectory_(encryptedDir); | |
} | |
if (!System::IO::Directory::Exists(pre97Dir)) | |
{ | |
System::IO::Directory::CreateDirectory_(pre97Dir); | |
} | |
System::ArrayPtr<System::String> fileList = System::IO::Directory::GetFiles(dataDir); | |
// Loop through all found files. | |
for (System::String const &fileName: fileList) | |
{ | |
// Extract and display the file name without the path. | |
System::String nameOnly = System::IO::Path::GetFileName(fileName); | |
std::cout << nameOnly.ToUtf8String(); | |
// Check the file format and move the file to the appropriate folder. | |
System::SharedPtr<FileFormatInfo> info = FileFormatUtil::DetectFileFormat(fileName); | |
// Display the document type. | |
switch (info->get_LoadFormat()) | |
{ | |
case LoadFormat::Doc: | |
std::cout << "\tMicrosoft Word 97-2003 document." << std::endl; | |
break; | |
case LoadFormat::Dot: | |
std::cout << "\tMicrosoft Word 97-2003 template." << std::endl; | |
break; | |
case LoadFormat::Docx: | |
std::cout << "\tOffice Open XML WordprocessingML Macro-Free Document." << std::endl; | |
break; | |
case LoadFormat::Docm: | |
std::cout << "\tOffice Open XML WordprocessingML Macro-Enabled Document." << std::endl; | |
break; | |
case LoadFormat::Dotx: | |
std::cout << "\tOffice Open XML WordprocessingML Macro-Free Template." << std::endl; | |
break; | |
case LoadFormat::Dotm: | |
std::cout << "\tOffice Open XML WordprocessingML Macro-Enabled Template." << std::endl; | |
break; | |
case LoadFormat::FlatOpc: | |
std::cout << "\tFlat OPC document." << std::endl; | |
break; | |
case LoadFormat::Rtf: | |
std::cout << "\tRTF format." << std::endl; | |
break; | |
case LoadFormat::WordML: | |
std::cout << "\tMicrosoft Word 2003 WordprocessingML format." << std::endl; | |
break; | |
case LoadFormat::Html: | |
std::cout << "\tHTML format." << std::endl; | |
break; | |
case LoadFormat::Mhtml: | |
std::cout << "\tMHTML (Web archive) format." << std::endl; | |
break; | |
case LoadFormat::Odt: | |
std::cout << "\tOpenDocument Text." << std::endl; | |
break; | |
case LoadFormat::Ott: | |
std::cout << "\tOpenDocument Text Template." << std::endl; | |
break; | |
case LoadFormat::DocPreWord60: | |
std::cout << "\tMS Word 6 or Word 95 format." << std::endl; | |
break; | |
case LoadFormat::Unknown: | |
default: | |
std::cout << "\tUnknown format." << std::endl; | |
break; | |
} | |
// Now copy the document into the appropriate folder. | |
if (info->get_IsEncrypted()) | |
{ | |
std::cout << "\tAn encrypted document." << std::endl; | |
System::IO::File::Copy(fileName, System::IO::Path::Combine(encryptedDir, nameOnly), true); | |
} | |
else | |
{ | |
switch (info->get_LoadFormat()) | |
{ | |
case LoadFormat::DocPreWord60: | |
System::IO::File::Copy(fileName, System::IO::Path::Combine(pre97Dir, nameOnly), true); | |
break; | |
case LoadFormat::Unknown: | |
System::IO::File::Copy(fileName, System::IO::Path::Combine(unknownDir, nameOnly), true); | |
break; | |
default: | |
System::IO::File::Copy(fileName, System::IO::Path::Combine(supportedDir, nameOnly), true); | |
break; | |
} | |
} | |
} | |
يتم نقل الملفات إلى المجلدات الفرعية المناسبة باستخدام طريقة Move
من فئة File
، من نفس مساحة الاسم System.IO
.
يتم استخدام الملفات التالية في المثال أعلاه. اسم الملف على اليسار ووصفه على اليمين:
مجموعة من الملفات | وثيقة الإدخال | النوع |
---|---|---|
تنسيقات الملفات المدعومة | Test File (DOC).doc | Microsoft Word 95/6.0 أو Microsoft Word 97-2003 وثيقة. |
Test File (DOT).dot | Microsoft Word 95/6.0 أو Microsoft Word 97-2003 قالب. | |
Test File (DOCX).docx | مكتب مفتوح XML وردبروسيسينغمل وثيقة دون وحدات الماكرو. | |
Test File (DOCM).docm | مكتب مفتوح XML وردبروسيسينغمل وثيقة مع وحدات الماكرو. | |
Test File (DOTX).dotx | فتح المكتب XML قالب معالجة الكلمات. | |
Test File (DOTM).dotm | فتح المكتب XML قالب وردبروسيسينغمل مع وحدات الماكرو. | |
Test File (XML).xml | فلاتوبك OOXML وثيقة. | |
Test File (RTF).rtf | وثيقة تنسيق النص المنسق. | |
Test File (WordML).xml | Microsoft Word 2003 وردبروسيسينغمل وثيقة. | |
Test File (HTML).html | HTML وثيقة. | |
Test File (MHTML).mhtml | MHTML (أرشيف الويب) وثيقة. | |
Test File (ODT).odt | OpenDocument نص (OpenOffice كاتب). | |
Test File (OTT).ott | OpenDocument قالب المستند. | |
ملف الاختبار (DocPreWord60).دوك | Microsoft Word 2.0 وثيقة. | |
المستندات المشفرة | Test File (Enc).doc | مشفرة Microsoft Word 95/6.0 أو Microsoft Word 97 – 2003 وثيقة. |
Test File (Enc).docx | فتح مكتب مشفر XML وردبروسيسينغمل وثيقة. | |
تنسيقات الملفات غير المدعومة | Test File (JPG).jpg | JPEG ملف الصورة. |