百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Aspose.Words for .NET使用教程(十一):检测文件格式和兼容性

csdh11 2025-05-25 11:46 4 浏览

Aspose.Words无需Microsoft Word也可在任何平台上满足Word文档的一切操作需求。本文将与大家分享如何检测文件格式和检查格式兼容性。

Aspose.Words for .NET官方最新版免费下载试用,历史版本下载,在线文档和帮助文件下载-慧都网

有时我们需要在打开文件之前检测文档文件的格式,因为文件扩展名不能保证文件内容是合适的。

例如,大家都知道,Crystal Reports通常以RTF格式输出文档,但文档的扩展名却是.doc。因此,如果你不确定文件的实际内容是什么并且希望在打开文件过程中不要出现异常,则可以使用
FileFormatUtil.DetectFileFormat方法。 这是一个静态方法,它接受包含文件数据的文件名或流对象。该方法返回一个FileFormatInfo对象,该对象包含检测到的有关文件类型的信息。

当你处理各种文件格式的多个文档时,你可能需要将那些可以由Aspose.Words处理的文件和那些不能处理的文件分开。你可能还想知道为什么某些文档无法处理。

如果你尝试将文件加载到Document对象中并且Aspose.Words无法识别文件格式或不支持该格式,Aspose.Words将出现异常。你可以记录这些异常并对其进行分析,但Aspose.Words还提供了一种专门的方法,可以快速确定文件格式,而不需要加载可能有异常的文档。

我们将在代码中执行以下步骤,以检查所选文件夹中所有文件的格式兼容性,并按文件格式将它们排序到适当的子文件夹中。

  1. 获取所选文件夹中所有文件的集合。
  2. 循环收集。
  3. 对于每个文件:检查文件格式。显示检查结果。将文件移动到适当的文件夹。

此示例中使用了以下文件。文件名在左侧,其描述在右侧。测试支持的文件格式:

输入文件

类型

测试文件(XML).xml

FlatOPC OOXML文档。

测试文件(WordML).xml

Microsoft Word 2003 WordprocessingML文档。

测试文件(rtf).rtf

富文本格式文档。

测试文件(odt).odt

OpenDocument文本格式(OpenOffice Writer)。

测试文件(MHTML).mhtml

MHTML(Web档案)文档。

测试文件(HTML).html

HTML文档。

测试文件(dotx).dotx

Office Open XML WordprocessingML模板。

测试文件(dot).dot

Microsoft Word 97 - 2003模板

测试文件(docx).docx

没有宏的Office Open XML WordprocessingML文档。

测试文件(docm).docm

有宏的Office Open XML WordprocessingML文档。

测试文件(doc).doc

Microsoft Word 97 - 2003文档。

测试加密文档:

输入文件

类型

测试文件(enc).doc

加密的Microsoft Word 97 - 2003文档。

测试文件(enc).docx

加密的Office Open XML WordprocessingML文档。

不支持的文件格式:

输入文件

类型

测试文件(pre97).doc

Microsoft Word 95文档。

测试文件(JPG).jpg

JPEG图像文件。

当我们处理文件夹中的内容时,我们首先要做的是使用Directory类的GetFiles方法(来自System.IO命名空间)获取此文件夹中所有文件的集合。

收集完所有文件后,其余工作由Aspose.Words组件中的
FileFormatUtil.DetectFileFormat 方法完成。

FileFormatUtil.DetectFileFormat 方法检查文件格式,但请注意它只检查文件格式,它不验证文件格式
。 这意味着即使
FileFormatUtil.DetectFileFormat 的返回结果表明此文件格式是受支持的格式之一,也无法保证文件将被顺利打开。这是因为
FileFormatUtil.DetectFileFormat 方法只读取文件格式的部分数据,足以检查文件格式,但不足以完成验证。 以下代码演示检查文件格式:

using System;
using System.Collections;
using System.IO;

using Aspose.Words;
using Aspose.Words.Tables;
using System.Diagnostics;

namespace Aspose.Words.Examples.CSharp.Loading_Saving
{
    class CheckFormat
    {
        public static void Run()
        {
            // ExStart:CheckFormatCompatibility
            // The path to the documents directory.
            string dataDir = RunExamples.GetDataDir_LoadingAndSaving();

            string supportedDir = dataDir + "OutSupported";
            string unknownDir = dataDir + "OutUnknown";
            string encryptedDir = dataDir + "OutEncrypted";
            string pre97Dir = dataDir + "OutPre97";

            // Create the directories if they do not already exist
            if (Directory.Exists(supportedDir) == false)
                Directory.CreateDirectory(supportedDir);
            if (Directory.Exists(unknownDir) == false)
                Directory.CreateDirectory(unknownDir);
            if (Directory.Exists(encryptedDir) == false)
                Directory.CreateDirectory(encryptedDir);
            if (Directory.Exists(pre97Dir) == false)
                Directory.CreateDirectory(pre97Dir);

            // ExStart:GetListOfFilesInFolder
            string[] fileList = Directory.GetFiles(dataDir);
            // ExEnd:GetListOfFilesInFolder
            // Loop through all found files.
            foreach (string fileName in fileList)
            {
                // Extract and display the file name without the path.
                string nameOnly = Path.GetFileName(fileName);
                Console.Write(nameOnly);
                // ExStart:DetectFileFormat
                // Check the file format and move the file to the appropriate folder.
                FileFormatInfo info = FileFormatUtil.DetectFileFormat(fileName);
                
                // Display the document type.
                switch (info.LoadFormat)
                {
                    case LoadFormat.Doc:
                        Console.WriteLine("\tMicrosoft Word 97-2003 document.");
                        break;
                    case LoadFormat.Dot:
                        Console.WriteLine("\tMicrosoft Word 97-2003 template.");
                        break;
                    case LoadFormat.Docx:
                        Console.WriteLine("\tOffice Open XML WordprocessingML Macro-Free Document.");
                        break;
                    case LoadFormat.Docm:
                        Console.WriteLine("\tOffice Open XML WordprocessingML Macro-Enabled Document.");
                        break;
                    case LoadFormat.Dotx:
                        Console.WriteLine("\tOffice Open XML WordprocessingML Macro-Free Template.");
                        break;
                    case LoadFormat.Dotm:
                        Console.WriteLine("\tOffice Open XML WordprocessingML Macro-Enabled Template.");
                        break;
                    case LoadFormat.FlatOpc:
                        Console.WriteLine("\tFlat OPC document.");
                        break;
                    case LoadFormat.Rtf:
                        Console.WriteLine("\tRTF format.");
                        break;
                    case LoadFormat.WordML:
                        Console.WriteLine("\tMicrosoft Word 2003 WordprocessingML format.");
                        break;
                    case LoadFormat.Html:
                        Console.WriteLine("\tHTML format.");
                        break;
                    case LoadFormat.Mhtml:
                        Console.WriteLine("\tMHTML (Web archive) format.");
                        break;
                    case LoadFormat.Odt:
                        Console.WriteLine("\tOpenDocument Text.");
                        break;
                    case LoadFormat.Ott:
                        Console.WriteLine("\tOpenDocument Text Template.");
                        break;
                    case LoadFormat.DocPreWord60:
                        Console.WriteLine("\tMS Word 6 or Word 95 format.");
                        break;
                    case LoadFormat.Unknown:
                    default:
                        Console.WriteLine("\tUnknown format.");
                        break;
                }
                // ExEnd:DetectFileFormat

                // Now copy the document into the appropriate folder.
                if (info.IsEncrypted)
                {
                    Console.WriteLine("\tAn encrypted document.");
                    File.Copy(fileName, Path.Combine(encryptedDir, nameOnly), true);
                }
                else
                {
                    switch (info.LoadFormat)
                    {
                        case LoadFormat.DocPreWord60:
                            File.Copy(fileName, Path.Combine(pre97Dir, nameOnly), true);
                            break;
                        case LoadFormat.Unknown:
                            File.Copy(fileName, Path.Combine(unknownDir, nameOnly), true);
                            break;
                        default:
                            File.Copy(fileName, Path.Combine(supportedDir, nameOnly), true);
                            break;
                    }
                }
            }
            // ExEnd:CheckFormatCompatibility
            Console.WriteLine("\nChecked the format of all documents successfully.");
        }
    }
}

相关推荐

Aspose.Cells新版上线,实现了更有效的格式转换功能!

概述:使用Aspose.Cells您无需MSExcel就可实现类似Excel电子表格的功能。Aspose.Cells新版上线,支持智能标记接受一个通用列表作为嵌套对象,还可以从StyleColle...

Aspose.Pdf新版来袭,精准的分页功能带给您全新的阅读体验!

概述:Aspose.Pdf是一个PDF文档创建组件,用户无需使用AdobeAcrobat也可读写和操作PDF文件。Aspose.Pdf新版增加了对标题实例中UserLabel属性的支持,而且分页时...

15个最强大的STL模型修复工具

如果你进行3D打印,可能遇到过可怕的“无法打印STL”问题:你的STL文件看起来很棒,但它会导致切片机出现问题或导致奇怪的打印错误或完全失败。无论确切原因是什么,这些问题的根源通常归结为...

Aspose.Slides for Cloud是一个让你高效处理演示文稿的应用程序接口!

Aspose.SlidesforCloud可以让你提取演示文稿中的幻灯片、文字、颜色、字体格式、形状和图像等不同的元素。它拥有强大的API可以让你处理云端的MicrosoftPowerPoint...

Aspose.Words for .NET使用教程(四):渲染和打印及文档内容功能

Aspose.Words无需MicrosoftWord也可在任何平台上满足Word文档的一切操作需求。本文将以表格的形式与大家分享Aspose.Wordsfor.NET的渲染和打印及文档内容功能...

Aspose.BarCode新版发布条码识别更准确

Aspose.BarCodefor.NETv7.4.0新增:BARCODENET-34297识别条码的尺寸较小的图像BARCODENET-34265新增对ITF14条码顶部和底部水平条的重置...

Aspose.BarCode 更新至v7.1.0

Aspose.BarCode是一个功能强大,且稳健的条形码生成和识别组件,其使用托管的C#编写,能帮助开发者快速简便的向其Microsoft应用程序(WinForms,ASP.NET和.NETC...

Aspose.Words 14.9.0发布,涵盖120多项更新

Aspose.Words14.9主要更新内容:新的报告引擎允许在报告模板使用LINQ方法语法。图像sdt支持数据绑定。DrawingML现在是一个复合节点。DrawingML支持链接的文本框。改善...

Aspose.Email V6.6.0发布

Aspose.Emailfor.NET6.6.0更新Aspose.Email是一个类库,使得应用程序可以操纵包括MicrosoftOutlook在内的流行消息格式。它支持IMAP、SMTP、P...

Aspose.Slides新版上线,更流畅地读取演示文稿!

Aspose.Slidesfor.NET15.9.0问题修复:SLIDESNET-36905-文本的颜色值错误SLIDESNET-36898-不能创建线形图报告SLIDESNET-368...

电子表格管理控件Aspose.Cells新版本v8.7.2发布!

表格控件Aspose.Cells支持所有Excel格式类型的操作,在没有MicrosoftExcel的环境下,用户也可为其应用程序嵌入类似Excel的强大数据管理功能。Aspose.Cells可以对...

Aspose.Words for .NET使用教程(十一):检测文件格式和兼容性

Aspose.Words无需MicrosoftWord也可在任何平台上满足Word文档的一切操作需求。本文将与大家分享如何检测文件格式和检查格式兼容性。...

Aspose.Total 6折,单品85折 史上最低仅剩10天

12月“百厂约惠”活动,ASPOSE迎来史上最低折扣6折(Aspose.Total6折,单品85折),现在活动进入10天倒计时,活动结束立即恢复原价。活动截止:12月31日活动内容:Aspose....

Aspose.slide 批量替换母版背景图

收到一个业务需求,需要批量将pptx的母版的背景图进行替换,如果人工做的话,每个文件将需要花半小时到1个小时,每期100多个,每期将多要花费10多个人天,我们来看看怎么高效优化。直接祭起aspose....

C#导出excel复杂表格(单元各合并)

...