.Net Core 项目使用代码把文件打成zip格式压缩包

您所在的位置:网站首页 怎么把文件压缩为zip格式发送 .Net Core 项目使用代码把文件打成zip格式压缩包

.Net Core 项目使用代码把文件打成zip格式压缩包

2023-06-08 09:35| 来源: 网络整理| 查看: 265

一共分为两个步骤: 一、先引入管理Nuget包:NOPI 并简易书写一个压缩方法

image.png 1.先定义三个全局变量,用于压缩文件

/// /// 100MB写入一次 /// public static int avg = 1024 * 1024 * 100; /// /// 压缩项 /// public static event Action ItemCompressed; /// /// 每一项的个数 /// public static int itemCount = 0;

2.实例化一个压缩目录的方法

/// /// 压缩目录 /// /// 文件所在目录 /// 压缩包目录 /// /// public static bool ZipFileDictory(string filePath, string saveZipPath) { bool flag = true; if (!Directory.Exists(filePath)) { return false; } if (string.IsNullOrEmpty(saveZipPath)) { //如果压缩后的文件路径为空 则文件名称为 文件名 + .zip saveZipPath += ".zip"; } //实例化一个zip文件流 ZipOutputStream zipOutputStream = new ZipOutputStream(File.Create(saveZipPath)); zipOutputStream.SetLevel(6); //设置压缩级别为6级 //调用方法 递归进行压缩 flag = ZipFileDictory(filePath,zipOutputStream,""); zipOutputStream.Finish(); zipOutputStream.Close(); return flag; }

3.递归进行文件压缩

/// /// 递归压缩文件夹方法 /// /// 文件路径 /// zip文件流 /// 父类文件名称 /// private static bool ZipFileDictory(string filePath, ZipOutputStream s, string ParentFolderName) { bool flag = true; string[] folders, filenames; ZipEntry entry = null; //压缩后的文件目录 FileStream fs = null; //文件数据流 //Crc32 crc = new Crc32(); try { //创建当前文件夹 entry = new ZipEntry(Path.Combine(ParentFolderName, Path.GetFileName(filePath) + "/")); //加上 “/” 才会当成是文件夹创建 s.PutNextEntry(entry); s.Flush(); //先压缩文件,再递归压缩文件夹 filenames = Directory.GetFiles(filePath); foreach (string file in filenames) { itemCount++; ItemCompressed?.Invoke(itemCount); //打开压缩文件 fs = File.OpenRead(file); byte[] buffer = new byte[avg]; entry = new ZipEntry(Path.Combine(ParentFolderName, Path.GetFileName(filePath) + "/" + Path.GetFileName(file))) { DateTime = DateTime.Now, Size = fs.Length }; s.PutNextEntry(entry); for (int i = 0; i < fs.Length; i += avg) { if (i + avg > fs.Length) { //不足100MB的部分写剩余部分 buffer = new byte[fs.Length - i]; } fs.Read(buffer, 0, buffer.Length); s.Write(buffer, 0, buffer.Length); } } } catch { flag = false; } finally { if (fs != null) { fs.Close(); } GC.Collect(); GC.Collect(1); } folders = Directory.GetDirectories(filePath); foreach (string folder in folders) { if (!ZipFileDictory(folder, s, Path.Combine(ParentFolderName, Path.GetFileName(filePath)))) return false; } return flag; } 二、在接口中调用压缩方法即可

1.如下图所示,这是我压缩之前的文件

image.png

2.如下图所示,这是我的压缩方法调用

image.png

3.如下图所示,我的文件已经被压缩成功了

image.png

以上就是我自己整理的一个简单压缩文件的方法,大家有更加好用的方法,欢迎来评论区一起探讨!!!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3