ファイル形式の検出と形式の互換性の確認
ファイル拡張子がファイルの内容が適切であることを保証するものではないため、開く前に文書の形式を決定する必要がある場合があります。 例えば、Crystal ReportsはしばしばRTF形式で文書を出力することが知られていますが、それらを与えます。doc拡張子。
Aspose.Wordsは、ファイルの実際の内容がわからない場合に例外を回避するために、ファイルの種類に関する情報を取得する機能を提供します。
例外なくファイル形式を検出する
さまざまなファイル形式の複数のドキュメントを扱う場合は、Aspose.Wordsで処理できるファイルと処理できないファイルを分離する必要があります。 また、一部のドキュメントを処理できない理由も知りたい場合があります。
ファイルをDocumentオブジェクトにロードしようとしたときにAspose.Wordsがファイル形式を認識できないか、形式がサポートされていない場合、Aspose.Wordsは例外をスローします。Aspose.Wordsは、Documentオブジェクトにファイルをロードしようとしたときにファイル形式を認識できません。 これらの例外をキャッチして分析することができますが、Aspose.WordsはDetectFileFormatメソッドも提供しており、可能な例外を含む文書をロードすることなくファイル形式を迅速に判断できます。 このメソッドは、ファイルの種類に関する検出された情報を含むFileFormatInfoオブジェクトを返します。
ファイル形式の互換性を確認する
選択したフォルダ内のすべてのファイルの形式の互換性を確認し、対応するサブフォルダに形式で並べ替えることができます。
フォルダ内のコンテンツを扱っているので、最初に行う必要があるのは、Directory
クラスのGetFilesメソッド(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; | |
} | |
} | |
} | |
ファイルは、File
クラスのMove
メソッドを使用して、同じSystem.IO
名前空間から適切なサブフォルダに移動されます。
上記の例では、次のファイルが使用されています。 ファイル名は左側にあり、その説明は右側にあります:
ファイルのグループ | 入力文書 | タイプ |
---|---|---|
サポートされているファイル形式 | Test File (DOC).doc | Microsoft Word95/6.0またはMicrosoft Word97–2003文書。 |
Test File (DOT).dot | Microsoft Word95/6.0またはMicrosoft Word97–2003テンプレート。 | |
Test File (DOCX).docx | マクロなしのOffice Open XML WordprocessingMLドキュメント。 | |
Test File (DOCM).docm | マクロを持つOffice Open XML WordprocessingMLドキュメント。 | |
Test File (DOTX).dotx | OfficeオープンXML WordprocessingMLテンプレート。 | |
Test File (DOTM).dotm | マクロを持つOfficeオープンXML WordprocessingMLテンプレート。 | |
Test File (XML).xml | FlatOPC OOXMLドキュメント。 | |
Test File (RTF).rtf | リッチテキスト形式の文書。 | |
Test File (WordML).xml | Microsoft Word2003WordprocessingMLドキュメント。 | |
Test File (HTML).html | HTML文書。 | |
Test File (MHTML).mhtml | MHTML(ウェブアーカイブ)ドキュメント。 | |
Test File (ODT).odt | OpenDocumentテキスト(OpenOfficeライター)。 | |
Test File (OTT).ott | OpenDocumentドキュメントテンプレート。 | |
テストファイル(DocPreWord60)。ドク | Microsoft Word2.0文書。 | |
暗号化された文書 | Test File (Enc).doc | 暗号化されたMicrosoft Word95/6.0またはMicrosoft Word97–2003文書。 |
Test File (Enc).docx | 暗号化されたOffice Open XML WordprocessingMLドキュメント。 | |
サポートされていないファイル形式 | Test File (JPG).jpg | JPEG画像ファイル。 |