Détecter le Format de Fichier et vérifier la compatibilité des Formats
Parfois, il est nécessaire de déterminer le format d’un document avant de l’ouvrir car l’extension de fichier ne garantit pas que le contenu du fichier est approprié. Par exemple, il est connu que Crystal Reports produit souvent des documents au format RTF, mais leur donne le .extension de document.
Aspose.Words permet d’obtenir des informations sur le type de fichier afin d’éviter une exception si vous n’êtes pas sûr du contenu réel du fichier.
Détecter le format de fichier sans exception
Lorsque vous traitez plusieurs documents dans différents formats de fichiers, vous devrez peut-être séparer les fichiers qui peuvent être traités par Aspose.Words de ceux qui ne le peuvent pas. Vous voudrez peut-être aussi savoir pourquoi certains documents ne peuvent pas être traités.
Si vous essayez de charger un fichier dans un objet Document et que Aspose.Words ne peut pas reconnaître le format de fichier ou que le format n’est pas pris en charge, Aspose.Words lèvera une exception. Vous pouvez intercepter ces exceptions et les analyser, mais Aspose.Words fournit également la méthode DetectFileFormat qui nous permet de déterminer rapidement le format de fichier sans charger un document avec d’éventuelles exceptions. Cette méthode renvoie un objet FileFormatInfo qui contient les informations détectées sur le type de fichier.
Vérifier La Compatibilité Des Formats De Fichiers
Nous pouvons vérifier la compatibilité des formats de tous les fichiers du dossier sélectionné et les trier par format dans les sous-dossiers correspondants.
Puisque nous traitons du contenu d’un dossier, la première chose à faire est d’obtenir une collection de tous les fichiers de ce dossier en utilisant la méthode GetFiles de la classe Directory
(à partir de l’espace de noms System.IO
).
L’exemple de code suivant montre comment obtenir une liste de tous les fichiers du dossier:
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); |
Lorsque tous les fichiers sont collectés, le reste du travail est effectué par la méthode DetectFileFormat, qui vérifie le format du fichier.
L’exemple de code suivant montre comment parcourir la liste de fichiers collectés, vérifier le format de chaque fichier et déplacer chaque fichier vers le dossier approprié:
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; | |
} | |
} | |
} | |
Les fichiers sont déplacés dans les sous-dossiers appropriés en utilisant la méthode Move
de la classe File
, à partir du même espace de noms System.IO
.
Les fichiers suivants sont utilisés dans l’exemple ci-dessus. Le nom du fichier est à gauche et sa description est à droite:
Groupe de Fichiers | Document d’entrée | Type |
---|---|---|
Formats de fichiers pris en charge | Test File (DOC).doc | Document Microsoft Word 95/6.0 ou Microsoft Word 97 – 2003. |
Test File (DOT).dot | Modèle Microsoft Word 95/6.0 ou Microsoft Word 97 – 2003. | |
Test File (DOCX).docx | Traitement de texte Office Open XML Document ML sans macros. | |
Test File (DOCM).docm | Traitement de texte Office Open XML Document ML avec macros. | |
Test File (DOTX).dotx | Modèle de traitement de texte Office Open XML. | |
Test File (DOTM).dotm | Modèle de traitement de texte Office Open XML avec macros. | |
Test File (XML).xml | Document au format OOXML. | |
Test File (RTF).rtf | Document au Format Texte Enrichi. | |
Test File (WordML).xml | Document de traitement de texte Microsoft Word 2003ml. | |
Test File (HTML).html | Document HTML. | |
Test File (MHTML).mhtml | Document MHTML (archives Web). | |
Test File (ODT).odt | OpenDocument Texte (OpenOffice Écrivain). | |
Test File (OTT).ott | OpenDocument Modèle de document. | |
Fichier de test (DocPreWord60).doc | Document Microsoft Word 2.0. | |
Documents chiffrés | Test File (Enc).doc | Document chiffré Microsoft Word 95 / 6.0 ou Microsoft Word 97 – 2003. |
Test File (Enc).docx | Document XML de traitement de texte Open XML Office crypté. | |
Formats de fichiers non pris en charge | Test File (JPG).jpg | Fichier image JPEG. |