在.NET中实现文件或文件目录压缩和解压可以通过多种方式来完成,包括使用原生方法(System.IO.Compression命名空间中的类)和第三方库(如:SharpZipLib、SharpCompress、K4os.Compression.LZ4等)。本文我们主要讲的是如何使用.NET原生方法System.IO.Compression命名空间中的类来对文件和文件夹进行压缩或解压缩(压缩格式.zip文件格式)。
包含为流提供基本压缩和解压缩服务的类。
用来指示压缩操作是强调速度还是强调压缩大小的值。
枚举类型 | 枚举值 | 作用说明 |
Optimal | 0 | 压缩操作应以最佳方式平衡压缩速度和输出大小。 |
Fastest | 1 | 即使结果文件未可选择性地压缩,压缩操作也应尽快完成。 |
NoCompression | 2 | 该文件不应执行压缩。 |
SmallestSize | 3 | 压缩操作应创建尽可能小的输出,即使该操作需要更长的时间才能完成。 |
用来与 zip 存档条目进行交互的值。
枚举类型 | 枚举值 | 作用说明 |
Read | 0 | 只允许读取存档项。 |
Create | 1 | 只允许创建新的存档项。 |
Update | 2 | 允许对存档项执行读取和写入操作。 |
创建名为:FileCompDecompExercise的控制台应用。
图片
图片
图片
static void Main(string[] args) { var sourceFilePath = @"./MySourceFile.xls"; //指定要压缩的文件路径(先创建对应.xls文件) var zipSourceFilePath = @"./OutputFolder/ZipSourceFilePath.zip"; //压缩后文件存放路径 //指定文件压缩为zip文件 CompressZipFile(sourceFilePath, zipSourceFilePath); Console.WriteLine("操作完成"); } /// <summary> /// 指定文件压缩为zip文件 /// </summary> /// <param name="sourceFilePath">指定要压缩的文件路径</param> /// <param name="zipFilePath">指定压缩后的zip文件路径</param> public static void CompressZipFile(string sourceFilePath, string zipFilePath) { //确保指定的路径中的目录存在 DirectoryInfo directoryInfo = new DirectoryInfo(zipFilePath); if (directoryInfo.Parent != null) { directoryInfo = directoryInfo.Parent; } if (!directoryInfo.Exists) { directoryInfo.Create(); } // 创建一个新的 Zip 存档并向其中添加指定的文件 using (ZipArchive archive = ZipFile.Open(zipFilePath, ZipArchiveMode.Update)) { archive.CreateEntryFromFile(sourceFilePath, Path.GetFileName(sourceFilePath)); } Console.WriteLine("文件压缩完成"); }
图片
static void Main(string[] args) { var sourceDirectory = @"./ZipFileDirectory";//指定压缩的文件目录(先在对应位置创建好) var zipFilePath = @"./OutputFolder/Archive.zip"; //压缩后文件存放路径 CompressZipFileDirectory(sourceDirectory, zipFilePath); Console.WriteLine("操作完成"); } /// <summary> /// 指定文件目录压缩为zip文件 /// </summary> /// <param name="sourceDirectory">指定压缩的文件目录</param> /// <param name="zipFilePath">压缩后文件存放路径</param> public static void CompressZipFileDirectory(string sourceDirectory, string zipFilePath) { //确保指定的路径中的目录存在 DirectoryInfo directoryInfo = new DirectoryInfo(zipFilePath); if (directoryInfo.Parent != null) { directoryInfo = directoryInfo.Parent; } if (!directoryInfo.Exists) { directoryInfo.Create(); } //创建一个新的 .zip 文件并将文件夹内容压缩进去 ZipFile.CreateFromDirectory(sourceDirectory, zipFilePath, CompressionLevel.Optimal, false); Console.WriteLine("文件目录压缩完成"); }
图片
static void Main(string[] args) { var zipFilePath = @"./OutputFolder/Archive.zip"; //压缩后文件存放路径 string extractPath = @"./OutputFolder"; // 解压目标文件夹路径 //解压.zip文件到目标文件夹 ExtractZipFile(zipFilePath, extractPath); Console.WriteLine("操作完成"); } /// <summary> /// 解压.zip文件到目标文件夹 /// </summary> /// <param name="zipFilePath">要解压的.zip文件路径</param> /// <param name="extractPath">解压目标文件夹路径</param> public static void ExtractZipFile(string zipFilePath, string extractPath) { if (!Directory.Exists(extractPath)) { Directory.CreateDirectory(extractPath); } // 提取 .zip 文件到指定文件夹 ZipFile.ExtractToDirectory(zipFilePath, extractPath); Console.WriteLine("文件解压完成"); }
图片
https://github.com/YSGStudyHards/DotNetExercises/tree/master/FileCompDecompExercise
本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-95164-0.html.NET使用原生方法实现文件压缩和解压
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
上一篇: Apereo CAS SSO单点系统的 OAuth2/OpenID Connect集成问题
下一篇: 哈啰面试:说说Dubbo运行原理?