讲师中心 微信公众号
AI工具推荐 视频效率加速

C#向现有ZIP包添加文件 C#如何更新一个zip压缩文件

轻婷同学_5837

轻婷同学_5837

发布时间:2026-02-18 11:15:20

|

507人浏览过

|

来源于php中文网

原创

使用 ZipArchive 更新 ZIP 文件必须指定 ZipArchiveMode.Update,底层流需可读写,手动删除同名旧条目后再创建新条目,写入后须调用 Flush() 和 Dispose(),路径分隔符必须为正斜杠 /。

c#向现有zip包添加文件 c#如何更新一个zip压缩文件

用 ZipArchive 打开 ZIP 时必须指定 ZipArchiveMode.Update

默认的 ZipArchive 构造方式(如只传 Stream)是只读模式,直接调用 CreateEntry 会抛出 NotSupportedException。必须显式传入 ZipArchiveMode.Update,且底层流不能是只读的(比如 File.OpenRead() 就不行)。

  • 使用 File.Open(..., FileMode.Open, FileAccess.ReadWrite) 或 File.Open(..., FileMode.OpenOrCreate, FileAccess.ReadWrite)
  • 如果 ZIP 文件不存在,FileMode.Open 会抛 FileNotFoundException,建议先检查文件是否存在,再选 OpenOrCreate
  • 别用 MemoryStream 做更新目标——它不支持随机写入,ZipArchiveMode.Update 会失败

ZipArchive.CreateEntry 会覆盖同名文件,但不会自动删除旧条目

ZIP 是基于条目(entry)的扁平结构,没有“目录”概念;添加同名路径的 entry 时,CreateEntry 不报错,但后续写入会覆盖该路径的内容。但注意:原 ZIP 中已存在的同名 entry 并不会被自动清理——实际效果取决于 ZIP 工具如何解析重复路径(多数解压工具取最后一个)。真正安全的更新需手动删除旧 entry。

C#
C#

"避开 C# 常见错误——空陷阱、异步陷阱、LINQ 陷阱及资源泄漏。"

下载
  • 遍历 archive.Entries,用 entry.FullName.Equals("path/in/zip.txt", StringComparison.OrdinalIgnoreCase) 查找
  • 调用 entry.Delete()(仅在 Update 模式下可用)
  • 再 CreateEntry + 写入新内容
  • 注意:.NET 6+ 支持 Delete();.NET 5 及更早版本不支持,只能重建整个 ZIP

写入内容后必须显式调用 stream.Flush() 和 archive.Dispose()

ZipArchive 的更新是延迟写入的:entry 创建、流写入都不立即落盘。只有在 Dispose()(或 using 块结束)时才真正重写 ZIP 文件头和中央目录。漏掉这步会导致 ZIP 损坏或新增文件不可见。

  • 务必用 using (var archive = new ZipArchive(stream, ZipArchiveMode.Update)) { ... }
  • 不要提前 stream.Close() 或 stream.Dispose(),否则 archive.Dispose() 会失败
  • 如果手写 try/finally,确保 archive.Dispose() 在 finally 中执行

追加文件时路径分隔符必须用正斜杠 /

ZIP 规范要求内部路径使用 /,即使在 Windows 上用 Path.Combine 生成的是 ,也会导致解压时路径异常(如创建出名为 "folder ile.txt" 的单个文件,而非子目录结构)。

  • 用 entryName.Replace("\", "/") 或 Path.GetRelativePath(root, fullPath).Replace("\", "/")
  • 避免以 / 开头(如 /data/file.txt),ZIP 解析器可能忽略前导斜杠,导致路径错位
  • 空目录无法直接添加——ZIP 没有目录 entry,只能靠文件路径隐含,例如 "logs/" 不合法,但 "logs/empty.txt" 可以让解压工具创建 logs 目录
.NET 的 ZIP 更新能力很基础,不支持压缩级别调整、加密、跨磁盘追加等操作;真要高频修改 ZIP,不如用 SharpZipLib 或 DotNetZip 这类库——它们暴露更多控制点,但代价是引入第三方依赖。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

3231

2023.11.13

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

985

2023.12.29

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3339

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2898

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

1508

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

2639

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3330

2023.08.08

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1657

2023.08.10

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn