Dosya Biçimini Algıla ve Biçim Uyumluluğunu Kontrol Et
Bazen açmadan önce bir belgenin formatını belirlemek gerekir, çünkü dosya uzantısı dosyanın içeriğinin uygun olduğunu garanti etmez. Örneğin, Crystal Reports’un belgeleri genellikle RTF biçiminde çıkardığı, ancak bunları verdiği bilinmektedir.doküman uzantısı.
Aspose.Words, dosyanın gerçek içeriğinin ne olduğundan emin değilseniz, bir istisnadan kaçınmak için dosya türü hakkında bilgi edinme olanağı sağlar.
İstisnasız Dosya Biçimini Algıla
Çeşitli dosya biçimlerinde birden çok belgeyle uğraşırken, Aspose.Words tarafından işlenebilen dosyaları işlenemeyenlerden ayırmanız gerekebilir. Bazı belgelerin neden işlenemediğini de bilmek isteyebilirsiniz.
Document nesnesine bir dosya yüklemeye çalışırsanız ve Aspose.Words dosya biçimini tanıyamazsa veya biçim desteklenmiyorsa, Aspose.Words bir özel durum oluşturur. Bu istisnaları yakalayabilir ve analiz edebilirsiniz, ancak Aspose.Words, olası istisnalar dışında bir belge yüklemeden dosya biçimini hızlı bir şekilde belirlememize olanak tanıyan DetectFileFormat yöntemini de sağlar. Bu yöntem, dosya türü hakkında algılanan bilgileri içeren bir FileFormatInfo nesnesi döndürür.
Dosya Formatı Uyumluluğunu Kontrol Edin
Seçilen klasördeki tüm dosyaların format uyumluluğunu kontrol edebilir ve bunları formata göre karşılık gelen alt klasörlere göre sıralayabiliriz.
Bir klasördeki içeriklerle uğraştığımız için yapmamız gereken ilk şey, Directory
sınıfının GetFiles yöntemini (System.IO
ad alanından) kullanarak bu klasördeki tüm dosyaların bir koleksiyonunu elde etmektir.
Aşağıdaki kod örneği, klasördeki tüm dosyaların listesini nasıl alacağınızı gösterir:
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); |
Tüm dosyalar toplandığında, işin geri kalanı dosya biçimini kontrol eden DetectFileFormat yöntemiyle yapılır.
Aşağıdaki kod örneği, toplanan dosyalar listesinde yinelemenin, her dosyanın biçimini denetlemenin ve her dosyayı uygun klasöre taşımanın yollarını gösterir:
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; | |
} | |
} | |
} | |
Dosyalar, aynı System.IO
ad alanından File
sınıfının Move
yöntemi kullanılarak uygun alt klasörlere taşınır.
Yukarıdaki örnekte aşağıdaki dosyalar kullanılmaktadır. Dosya adı solda ve açıklaması sağda:
Dosya Grubu | Giriş Belgesi | Tip |
---|---|---|
Desteklenen dosya biçimleri | Test File (DOC).doc | Microsoft Word 95/6.0 veya Microsoft Word 97 – 2003 belgesi. |
Test File (DOT).dot | Microsoft Word 95/6.0 veya Microsoft Word 97 – 2003 şablonu. | |
Test File (DOCX).docx | Office, makrolar olmadan XML WordprocessingML belgesini açar. | |
Test File (DOCM).docm | Office XML WordprocessingML belgesini makrolarla açın. | |
Test File (DOTX).dotx | Office Açık XML WordprocessingML şablonu. | |
Test File (DOTM).dotm | Office XML WordprocessingML şablonunu makrolarla açın. | |
Test File (XML).xml | FlatOPC OOXML Belgesi. | |
Test File (RTF).rtf | Zengin Metin Biçimi belgesi. | |
Test File (WordML).xml | Microsoft Word 2003 WordprocessingML belgesi. | |
Test File (HTML).html | HTML belge. | |
Test File (MHTML).mhtml | MHTML (Web arşivi) belgesi. | |
Test File (ODT).odt | OpenDocument Metin (OpenOffice Yazar). | |
Test File (OTT).ott | OpenDocument Belge Şablonu. | |
Test Dosyası (DocPreWord60).doktor | Microsoft Word 2.0 belge. | |
Şifrelenmiş belgeler | Test File (Enc).doc | Şifrelenmiş Microsoft Word 95 / 6.0 veya Microsoft Word 97 – 2003 belgesi. |
Test File (Enc).docx | Şifrelenmiş Office XML WordprocessingML belgesini açar. | |
Desteklenmeyen dosya biçimleri | Test File (JPG).jpg | JPEG resim dosyası. |