C#如何无需解压直接将ZipArchive内的条目复制到另一个ZipArchive
实现方案
你可以直接通过流复制的方式完成条目转移,全程不需要将文件解压到磁盘,具体实现代码如下:
using (var zipArchive1 = ZipFile.Open(zipFile1, ZipArchiveMode.Read)) { using (var zipArchive2 = ZipFile.Open(zipFile2, ZipArchiveMode.Update)) { var sourceEntry = zipArchive1.GetEntry("fileName"); // 先判断源条目是否存在 if (sourceEntry == null) { // 这里可以补自定义的缺失处理逻辑 return; } // 在目标压缩包中创建和源条目名称、路径一致的新条目 var targetEntry = zipArchive2.CreateEntry(sourceEntry.FullName); // 直接复制流内容,无需落地磁盘 using (var sourceStream = sourceEntry.Open()) using (var targetStream = targetEntry.Open()) { sourceStream.CopyTo(targetStream); } } }
注意事项
- 代码依赖
System.IO.Compression命名空间,使用前需要先引入 - 如果目标压缩包已经存在同名条目,
CreateEntry会直接覆盖原有内容,如果需要避免覆盖,可以先调用zipArchive2.GetEntry(sourceEntry.FullName)做存在性判断再执行后续逻辑 - 上述代码仅适用于文件类型的条目,如果需要转移文件夹类型的条目,需要额外遍历文件夹下的所有子条目批量处理
内容的提问来源于stack exchange,提问作者L.Cam
相关产品推荐
相关产品推荐

