Zjistěte Formát souboru a zkontrolujte kompatibilitu formátu
Někdy je nutné před otevřením určit formát dokumentu, protože přípona souboru nezaručuje, že obsah souboru je vhodný. Například je známo, že Crystal Reports často vydává dokumenty ve formátu RTF, ale dává jim .rozšíření doc.
Aspose.Words poskytuje možnost získat informace o typu souboru, aby se zabránilo výjimce, pokud si nejste jisti, jaký je skutečný obsah souboru.
Detekce formátu souboru bez výjimky
Pokud máte co do činění s více dokumenty v různých formátech souborů, možná budete muset oddělit ty soubory, které lze zpracovat Aspose.Words, od těch, které nemohou. Možná budete chtít vědět, proč některé dokumenty nelze zpracovat.
Pokud se pokusíte načíst soubor do objektu Document a Aspose.Words nemůže rozpoznat formát souboru nebo formát není podporován, Aspose.Words vyvolá výjimku. Tyto výjimky můžete zachytit a analyzovat, ale Aspose.Words také poskytuje metodu DetectFileFormat, která nám umožňuje rychle určit formát souboru bez načtení dokumentu s možnými výjimkami. Tato metoda vrací objekt FileFormatInfo, který obsahuje zjištěné informace o typu souboru.
Zkontrolujte Kompatibilitu Formátu Souborů
Můžeme zkontrolovat kompatibilitu formátu všech souborů ve vybrané složce a třídit je podle formátu do odpovídajících podsložek.
Protože máme co do činění s obsahem ve složce, první věcí, kterou musíme udělat, je získat sbírku všech souborů v této složce pomocí metody GetFiles třídy Directory
(z oboru názvů System.IO
).
Následující příklad kódu ukazuje, jak získat seznam všech souborů ve složce:
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); |
Když jsou všechny soubory shromážděny, zbytek práce se provádí metodou DetectFileFormat, která kontroluje Formát souboru.
Následující příklad kódu ukazuje, jak iterovat shromážděný seznam souborů, zkontrolovat formát každého souboru a přesunout každý soubor do příslušné složky:
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; | |
} | |
} | |
} | |
Soubory jsou přesunuty do příslušných podsložek pomocí metody Move
třídy File
ze stejného jmenného prostoru System.IO
.
Ve výše uvedeném příkladu jsou použity následující soubory. Název souboru je vlevo a jeho popis je vpravo:
Skupina souborů | Vstupní Dokument | Typus |
---|---|---|
Podporované formáty souborů | Test File (DOC).doc | Microsoft Word 95/6.0 nebo Microsoft Word 97 – dokument z roku 2003. |
Test File (DOT).dot | Microsoft Word 95/6.0 nebo Microsoft Word 97 – 2003 šablona. | |
Test File (DOCX).docx | Office otevřít XML WordprocessingML dokument bez Maker. | |
Test File (DOCM).docm | Office otevřít XML WordprocessingML dokument s makry. | |
Test File (DOTX).dotx | Office Open XML WordprocessingML šablona. | |
Test File (DOTM).dotm | Office otevřete šablonu XML WordprocessingML s makry. | |
Test File (XML).xml | FlatOPC OOXML dokument. | |
Test File (RTF).rtf | Formát RTF dokumentu. | |
Test File (WordML).xml | Microsoft Word 2003 WordprocessingML dokument. | |
Test File (HTML).html | HTML dokument. | |
Test File (MHTML).mhtml | MHTML (webový archiv) dokument. | |
Test File (ODT).odt | OpenDocument Text (OpenOffice Writer). | |
Test File (OTT).ott | OpenDocument Šablona Dokumentu. | |
Test File (DocPreWord60).doc | Microsoft Word 2.0 dokument. | |
Šifrované dokumenty | Test File (Enc).doc | Šifrovaný dokument Microsoft Word 95/6.0 nebo Microsoft Word 97 – 2003. |
Test File (Enc).docx | Zašifrovaná kancelář otevřít XML WordprocessingML dokument. | |
Nepodporované formáty souborů | Test File (JPG).jpg | JPEG soubor obrázku. |