【问题标题】:C#: after appending multiple docx files, receiving corrupt output docx fileC#:附加多个 docx 文件后,接收损坏的输出 docx 文件
【发布时间】:2017-08-24 03:06:29
【问题描述】:

我正在使用 VS 10 终极版和 .NET 4.0。

我正在尝试将多个 docx 文件附加到一个输出 docx 文件中。下面的代码适用于文本文件。但是,在附加多个 docx 文件的情况下,当我打开输出 docx 文件时,它会显示为损坏文件。

private static void CombineMultipleFilesIntoSingleFile(string inputDirectoryPath, string inputFileNamePattern, string outputFilePath)
    {
        string[] inputFilePaths = Directory.GetFiles(inputDirectoryPath, inputFileNamePattern);
        Console.WriteLine("Number of files: {0}.", inputFilePaths.Length);
        using (var outputStream = File.Create(outputFilePath))
        {
            foreach (var inputFilePath in inputFilePaths)
            {
                using (var inputStream = File.OpenRead(inputFilePath))
                {
                    inputStream.CopyTo(outputStream);
                }
                Console.WriteLine("The file {0} has been processed.", inputFilePath);
            }
        }
    }

更新 1:当我使用 .doc 文件尝试此代码时,输​​出 .doc 文件仅包含第一个文件数据。

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    因此,您实际上是从每个 .docx 文件中读取所有字节,然后将所有这些字节连接在一起,并期望从输出中获得有效的 .docx 文件。

    问题在于,与仅包含文本字符的文件不同,将一堆字节连接在一起可能会起作用,.docx 格式是一种 XML 格式,其中包含很多部分......当你将它们连接在一起时您得到的文件不符合 .docx 架构,并且不是有效的 XML,因为它没有外部 XML 标记。

    您需要以不同的方式解决这个问题才能解决它。天真的“只是连接字节”的方法在这里根本行不通。它通常也不适用于涉及文件头的任何其他格式。

    那里有一些库可能会为您解决这个问题。您可以查看https://github.com/OfficeDev/Open-XML-SDK 作为可能的解决方案。

    【讨论】:

    • 感谢您的回复。对于 docx 文件格式,我将研究 Open-xml sdk。但是,即使我使用 .doc 文件,结果 output.doc 文件也只包含第一个文件的内容。您能否对此进行调查并分享您的想法?
    • @NewDeveloper - 同样的问题。软件需要某种格式的输入 - .docx、.doc、.xls、.xlsx、.png、.mp3 ……随便什么。我想所有这些文件的所有字节都在那里,但是,与 .docx 一样,Word 正在寻找特定格式的数据......所以它读取该组合文件中的字节......在那里找到一堆字节开头是原始第一个 .doc 文件中的字节,并显示它们。其他字节对 Word 来说是垃圾。 Word 期望 .doc 或 .docx 文件中的数据符合某种格式。
    猜你喜欢
    • 2020-12-29
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多