【问题标题】:How to unzip docx file using C#?如何使用 C# 解压缩 docx 文件?
【发布时间】:2015-04-15 21:22:15
【问题描述】:

如何使用 C# 解压 docx 文件?

【问题讨论】:

  • 它是如何压缩的?反过来做。
  • 要将字节提取到您的垃圾箱中?
  • Word 文档不是存档文件。解压/解压是什么意思?
  • 我要提取它的XML
  • Word 文档 docx 实际上是一个 zip 文件。

标签: c# ms-word


【解决方案1】:

新的 Office 文件扩展名(docx、potx、xlsx 等)在上传到 Web 服务器然后下载时会变成 zip 文件。

这些文件格式现在使用 Open XML 文件格式系统,因此它们与来自 Google、Open Office 等的其他办公程序更加兼容。从本质上讲,它们是包含 XML 文件的 zip 文件,当使用适当的应用程序打开时,这些文件会变成友好的 Word 文档。

我从 here 那里偷来了这个充满耻辱的东西,你可以在其中找到完整的信息。

我希望这个答案能帮助你和所有取笑你并在不知道答案的情况下对你的问题投反对票的无知的人。

【讨论】:

  • 虽然这提供了很好的信息,但您引用的博客文章更多地涉及 Web 服务器无法为 2007 年基于 Open XML 的 Office 文档提供正确的 MIME 类型 :) 正确处理这些文件而不是重新发明轮子,Open XML SDK 是要走的路。
  • @David Khaykin 你是对的,但我只是想给他一个提示,这些文件确实可能是 zip 文件。
  • @Dummy01 我想知道您是否可以再次发送链接以获得答案。因为似乎链接没有正确重定向
【解决方案2】:

如果您的意思是 docx 文件,它们基本上只是使用特定约定创建的 zip 文件。

查看Packaging API。

【讨论】:

    【解决方案3】:

    这是您正在寻找的完整代码。我已将此类用于 docx zip 和 unzip 操作。

       using System.Collections.Generic;
       using System.IO;
       using System.Linq;
       using Microsoft.Deployment.Compression;
       using Microsoft.Deployment.Compression.Zip;
    
    
     namespace <YourPackage>.Libs
     {
     public class ZipFile
     {
        private string _zipfilepath;
    
        public ZipFile(string zipfilepath)
        {
            _zipfilepath = zipfilepath;
        }
    
        public void Compress(string filePath,bool deleteSourceFolder)
        {
            var filePaths = new List<string>();
    
            if (Directory.Exists(filePath))
            {
                filePaths.AddRange(Directory.GetFileSystemEntries(filePath).ToList());
            }
    
            if (filePaths.Count > 0)
            {
                var zip = new ZipInfo(_zipfilepath);
                zip.Pack(filePath, true, CompressionLevel.None, null);
            }
    
            if(deleteSourceFolder)
                Directory.Delete(filePath,deleteSourceFolder);
        }
    
        public void Uncompress(string destinationPath)
        {
            var zip = new ZipInfo(_zipfilepath);
            zip.Unpack(destinationPath);
        }       
    }
    

    }

    【讨论】:

    • 从哪里获得 Microsoft.Deployment 命名空间?我有所有默认引用,但 Microsoft 没有部署命名空间。
    • 抱歉回复晚了。你必须安装Wix。如果你想修改word文档,我强烈推荐DocX
    【解决方案4】:

    设置对 System.IO.Compression 和 System.IO.Compression.FileSystem 的引用。 然后是这样的:

    using System.IO.Compression;
    
    string zipPath = @"c:\tmp\Test.docx";
    using (ZipArchive archive = ZipFile.OpenRead(zipPath))
    {
       archive.ExtractToDirectory(zipPath + ".unzipped");
    }
    

    看看这里:https://msdn.microsoft.com/EN-US/library/hh485709(v=VS.110,d=hv.2).aspx(ZipFileExtensions.ExtractToDirectory 方法)

    【讨论】:

      【解决方案5】:

      您可以尝试使用System.IO.Packaging.ZipPackage

      【讨论】:

        【解决方案6】:

        安装 Open XML SDK http://www.microsoft.com/en-us/download/details.aspx?id=5124 并使用它来处理 Docx 文件中的 XML。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-19
          • 1970-01-01
          • 2022-07-27
          • 1970-01-01
          • 2014-07-31
          相关资源
          最近更新 更多