• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#Zip解压缩,规避[content_types].xml文件

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

使用 System.IO.Packaging.Package 进行压缩和解压时,会自动生成 [content_types].xml 文件。

The Structure of the [Content_types].xml File - Visual Studio | Microsoft Docs

压缩时生成这个其实无所谓,但解压文件时,也必须有这个文件的存在,否则不能解压。这就不能忍了,毕竟不是所有的 Zip 压缩包都会带这个文件的。

怎么解?

System.IO.Compression.ZipFile

最简单的方式,就是使用 System.IO.Compression.ZipFile 这个类,使用方式如下(示例):


        /// <summary>
        /// 解压文件,这个方法不需要压缩包中有 [Content_Types].xml 文件。
        /// </summary>
        public static IEnumerable<string> DecompressFileCompatibly(string target, string outPath)
        {
            ZipArchive zipArchive = ZipFile.Open(target, ZipArchiveMode.Read);

            // 获取所有文件(相对路径)
            var files = zipArchive.Entries.Select(e => e.FullName).ToList();

            // 解压文件 (要求 outPath 不能存在,必须是全新的)
            zipArchive.ExtractToDirectory(outPath);

            // 返回的文件列表中,不需要有 [Content_Types].xml 文件。
            files.Remove("[Content_Types].xml");

            // 最终解压出来的所有文件
            var fileList = files.Where(f =>
            {
                var file = Path.Combine(outPath, f);
                return File.Exists(file); // 过滤文件夹
            }).Select(f => Path.Combine(outPath, f)).ToList();

            return fileList;
        }

其它方式

也可以使用第三方库处理这个问题,如:

SharpZipLib | #ziplib is a Zip, GZip, Tar and BZip2 library written entirely in C# for the .NET platform.
DotNetZip Library - CodePlex Archive

参考资料:
how to avoid [Content_Types].xml in .net's ZipPackage class - Stack Overflow


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
.NET(C#)ASP.NET应用程序与页面生命周期发布时间:2022-07-14
下一篇:
C#泛型集合揽胜发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap