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ı.