C#如何实现多文件打包压缩
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,C#如何实现多文件打包压缩,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。最近项目需要实现多文件打包的功能,尝试了一些方法
千家信息网最后更新 2026年11月04日C#如何实现多文件打包压缩
C#如何实现多文件打包压缩,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
最近项目需要实现多文件打包的功能,尝试了一些方法,最后发现使用ICSharpCode.SharpZipLib 最符合项目的要求。
具体实现如下:
1.在 Nuget 中安装ICSharpCode.SharpZipLib

2.将要打包的文件放到同个文件夹进行压缩:
①压缩文件夹
////// 压缩文件 /// /// 压缩后获得的文件名 public static bool CompressFile(string dir, out string fileName) { string dest = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop) + "\\" + string.Format("{0:yyyyMMddHHmmss}", DateTime.Now) + ".zip"; //默认压缩在桌面上 if (!Directory.Exists(Path.GetDirectoryName(dest))) //文件不存在就根据路径创建 E:\\test Directory.CreateDirectory(Path.GetDirectoryName(dest)); using (ZipOutputStream zipStream = new ZipOutputStream(File.Create(dest))) { zipStream.SetLevel(6); //压缩级别0-9 CreateZip(dir, zipStream); fileName = dest; zipStream.Finish(); zipStream.Close(); } return true; } ////// 压缩内容到 zipStream 流中 /// /// 源文件 /// 目标文件流(全路径+文件名+.zip) private static void CreateZip(string source, ZipOutputStream zipStream) { Crc32 crc = new Crc32(); string[] files = Directory.GetFileSystemEntries(source); //获得所有文件名称和目录名称 foreach (var file in files) { if (Directory.Exists(file)) //如果是文件夹里有文件则递归 { CreateZip(file, zipStream); } else //如果不是则压缩 { using (FileStream fs = File.OpenRead(file)) { byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); string tempFileName = file.Substring(file.LastIndexOf("\\") + 1); //获得当前文件路径的文件名 ZipEntry entry = new ZipEntry(tempFileName); entry.DateTime = DateTime.Now; entry.Size = fs.Length; fs.Close(); crc.Reset(); crc.Update(buffer); entry.Crc = crc.Value; zipStream.PutNextEntry(entry); zipStream.Write(buffer, 0, buffer.Length); } } } }
②将指定文件打包压缩 (可打包线上文件)
////// 打包线上线下文件 /// /// 文件列表 /// 保存路径 public static void ZipOnlineFile3(ListfileList, string savepath) { //判断保存的文件目录是否存在 if (!File.Exists(savepath)) { var file = new FileInfo(savepath); if (!file.Directory.Exists) { file.Directory.Create(); } } Crc32 crc = new Crc32(); using (ZipOutputStream zipStream = new ZipOutputStream(File.Create(savepath))) { zipStream.SetLevel(9); //压缩级别0-9 foreach (var url in fileList) { byte[] buffer = new WebClient().DownloadData(url); string tempFileName = GetFileNameByUrl(url); //获得当前文件路径的文件名 ZipEntry entry = new ZipEntry(tempFileName); entry.DateTime = DateTime.Now; entry.Size = buffer.Length; crc.Reset(); crc.Update(buffer); zipStream.PutNextEntry(entry); zipStream.Write(buffer, 0, buffer.Length); } } }
从文件路径读取文件名的方法:
public static string GetFileNameByUrl(string url) { //判断路径是否为空 if (string.IsNullOrWhiteSpace(url)) return null; //判断是否为线上文件 if (url.ToLower().StartsWith("http")) { return url.Substring(url.LastIndexOf("/") + 1); } else { return url.Substring(url.LastIndexOf("\\") + 1); } }通过此方法生成的压缩包,所有文件都会显示在同一层。
③如果需要在文件中创建目录,需要在文件名称上指定文件路径
添加工具类:
////// 文件对象 /// public class FileItem { ////// 文件名称 /// public string FileName { get; set; } ////// 文件路径 /// public string FileUrl { get; set; } }
压缩文件的方法:
////// 打包线上线下文件 /// /// 压缩文件名称 /// 文件列表 /// 保存路径 public static string ZipFiles(string zipName, ListfileList, out string error) { error = string.Empty; string path = string.Format("/files/zipFiles/{0}/{1}/{2}/", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); //文件保存目录 string directory = FileSavePath + path; string url = FileHostUrl.TrimEnd('/') + path + zipName; string savePath = directory + zipName; try { if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } using (ZipOutputStream zipStream = new ZipOutputStream(File.Create(savePath))) { zipStream.SetLevel(9); //压缩级别0-9 foreach (var item in fileList) { byte[] buffer = new WebClient().DownloadData(item.FileUrl); ZipEntry entry = new ZipEntry(item.FileName); entry.DateTime = DateTime.Now; entry.Size = buffer.Length; zipStream.PutNextEntry(entry); zipStream.Write(buffer, 0, buffer.Length); } } } catch (Exception ex) { error = "文件打包失败:" + ex.Message; } return url; }
调用参数示例:
{ "zipName": "test.zip", "fileList": [ { "fileName": "123.png", "fileUrl": "https://file.yidongcha.cn/files/uploadfiles/image/2021/11/15/11c6de395fcc484faf4745ade62cf6e6.png" }, { "fileName": "123/456/789.jpg", "fileUrl": "https://file.yidongcha.cn/files/uploadfiles/image/2021/11/15/fe922b250acf4344b8ca4d2aad6e0355.jpg" } ]}生成的结果:

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
文件
路径
名称
文件名
目录
文件夹
方法
级别
内容
项目
帮助
生成
C#
清楚
功能
参数
对此
对象
工具
文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
咖啡豆
亿人帮互联网科技有限公司
湖南永感互联网科技有限公司
国智互联网科技
涨乐互联网科技
科技服务与互联网
云电互联网科技
美国互联网黑科技
深圳天众互联网科技公司
猫创互联网科技
阿里互联网科技公司
互联网公司科技股
互联网金融科技元年
互联网企业科技类企业如何做账
启辰互联网科技
浙南科技城互联网大厦招聘
北京品多多互联网科技有限公司
互联网领先科技成果宣传视频
现代科技的标志之一的互联网
广州全民伙伴互联网科技有限公司
互联网科技保险
互联网公司 科技公司
唐信互联网科技
碳银互联网科技
苏州互联网科技贷款公司
兼蜜互联网科技
中盈科技互联网信息有限公司
互联网还是高科技吗
新氧科技和美国互联网有关系吗
互联网科技自媒体灵感