前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >C# Zip解压缩,规避 [content_types].xml 文件

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

作者头像
jgrass
发布2024-12-25 16:09:11
发布2024-12-25 16:09:11
7800
代码可运行
举报
文章被收录于专栏:蔻丁杂记蔻丁杂记
运行总次数:0
代码可运行

使用 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 这个类,使用方式如下(示例):

代码语言:javascript
代码运行次数:0
运行
复制
/// <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

原文链接: https://cloud.tencent.com/developer/article/2481446

本作品采用 「署名 4.0 国际」 许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年3月22日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • System.IO.Compression.ZipFile
  • 其它方式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档