C#解压zip文件 C#如何读取zip压缩包内容-C#.Net教程

最稳妥直接用 .NET 内置 System.IO.Compression.ZipArchive 类,需以 ZipArchiveMode.Read 打开并用 using 确保释放;不支持密码,读取文本需指定编码,解压需防路径遍历。

用 ZipArchive 读取 ZIP 包内容最稳妥

直接用 .NET 内置的 System.IO.Compression.ZipArchive 类,无需第三方库,兼容 .NET Framework 4.5+ 和 .NET Core / .NET 5+。它不负责解压到磁盘,而是让你逐个访问条目(ZipArchiveEntry),适合只读取、检查或选择性提取。

  • 必须以 ZipArchiveMode.Read 打开,否则会报 System.IO.InvalidOperationException: Stream was not readable
  • 流不能被其他代码提前关闭或释放;推荐用 using 确保资源释放
  • 如果 ZIP 文件带密码,ZipArchive 原生不支持 —— 此时必须换 SharpZipLib 或 DotNetZip
using (var stream = File.OpenRead("archive.zip"))
using (var archive = new ZipArchive(stream, ZipArchiveMode.Read))
{
    foreach (var entry in archive.Entries)
    {
        Console.WriteLine($"{entry.FullName} ({entry.Length} bytes)");
        // 可调用 entry.Open() 读取其内容流
    }
}

读取某个具体文件的内容(不落地)

想跳过解压到硬盘、直接拿到某文件的字节或文本?关键在 ZipArchiveEntry.Open() 返回一个可读流,再配合 StreamReader 或 MemoryStream 处理。

  • 注意:entry.Length 是压缩前大小,entry.CompressedLength 是压缩后大小,别混淆
  • 若 entry 是空目录(FullName 以 / 结尾),Open() 会抛 NotSupportedException
  • 文本文件建议指定编码(如 UTF-8),否则可能乱码;二进制文件直接读 byte[]
var entry = archive.GetEntry("config.json");
if (entry != null)
{
    using var entryStream = entry.Open();
    using var reader = new StreamReader(entryStream, Encoding.UTF8);
    string content = reader.ReadToEnd(); // 或用 ReadAllBytes()
}

遇到 InvalidDataException 怎么办

常见于 ZIP 文件损坏、非标准格式(比如某些工具生成的“ZIP64 扩展未正确标记”),或流被截断。不是代码写错,而是输入不可靠。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » C#解压zip文件 C#如何读取zip压缩包内容-C#.Net教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4009353+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4009353+
  • 本周更新: 0+
  • 最后更新: 2026-03-16