用 C# 解压 ZIP 文件,这事儿说简单也简单,说坑也不少。绝大多数场景下,直接上 System.IO.Compression.ZipFile 就足够了——从 .NET Framework 4.5 到 .NET Core 2.0 都原生支持,完全不用动辄引入第三方库来给自己加戏。

ZipFile.ExtractToDirectory 一键解压(推荐场景)

如果你的需求很标准——比如解压一个正常的 ZIP,目标目录不存在或者可以清空重来,而且不需要对里面的每个文件单独做手脚——那这招就是最省事的。

ZipArchive 手动遍历解压(需要精细控制时)

什么时候才需要自己动手遍历?告诉你几个典型场景:你想跳过某些特定文件(比如 Mac 系统生成的那些烦人的 __MACOSX 文件夹),或者需要重命名条目、过滤扩展名、检查压缩方法、处理重复文件名,甚至要防范路径穿越攻击(恶意 ZIP 文件里可能夹着 ..\web.config 试图写到你不想让人写的地方)。这时候,ZipArchive 才是你的选择。

常见报错和绕过方法

解压失败别慌,先看错误类型再对症下药,别动不动就想着换库重写。

真正棘手的——带密码的 ZIP、ZIP64 超大文件、分卷压缩包或者用了 LZMA 等非标准压缩算法的——System.IO.Compression 统统搞不定。这时候才需要评估引入 SharpZipLibDotNetZip。但别忘了,多数业务场景里的 ZIP 根本碰不上这些特性,别还没遇到问题就先给自己加了个大依赖。

本文转载于:https://www.php.cn/faq/2333855.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。