当前位置:
首页 > Python基础教程 >
-
C#教程之【随笔系列】C#使用第三方SharpZipLib进行(2)
);
13
14 ///判断路径最后一个字符是否为当前系统的DirectorySeparatorChar
15 if (directory[directory.Length - 1] != Path.DirectorySeparatorChar)
16 {
17 directory += Path.DirectorySeparatorChar;
18 }
19 try
20 {
21 ///使用using语句,资源使用完毕,自动释放(类需继承IDispose接口)
22 ///打开压缩文件进行读取
23 using (FileStream fs = File.OpenRead(compressedFile))
24 {
25 ///创建压缩文件的输入流
26 using (ZipInputStream inStream = new ZipInputStream(fs))
27 {
28 ///加密的密码
29 inStream.Password = encryptPassword;
30 ZipEntry entry;
31 while ((entry = inStream.GetNextEntry()) != null)
32 {
33 ///文件的父级目录名称
34 string directoryName = null;
35 ///文件的名称,例如git\\git.exe
36 string entryName = entry.Name;
37
38 if (string.IsNullOrWhiteSpace(entryName) == false)
39 {
40 directoryName = Path.GetDirectoryName(entryName) + Path.DirectorySeparatorChar;
41 }
42 ///获取文件名称,例如git.exe
43 string name = Path.GetFileName(entryName);
44 ///文件的父级目录的绝对路径
45 string newDirectory = directory + directoryName;
46 if (Directory.Exists(newDirectory) == false)
47 {
48 Directory.CreateDirectory(newDirectory);
49 }
50
51 if (string.IsNullOrWhiteSpace(name) == false)
52 {
53 ///文件的绝对路径
54 string fileName = directory + directoryName + name;
55 ///如果覆盖解压或者本地不存在当前文件则进行解压缩
56 if (overWrite || File.Exists(fileName) == false)
57 {
58 using (FileStream fsWrite = File.Create(fileName))
59 {
60 ///缓存区对象
61 byte[] buffer = new byte[blockSize];
62 ///读取的字节数
63 int sizeRead = 0;
64 ///读取完成,解压完成
65 do
66 {
67 ///从流中读取字节,将此数据写入缓存区
68 sizeRead = inStream.Read(buffer, 0, buffer.Length);
69 ///将字节写入文件流
70 fsWrite.Write(buffer, 0, buffer.Length);
71 } while (sizeRead > 0);
72 }
73 }
74 }
75 }
76 }
77 }
78 }
79 catch (Exception ex)
80 {
81 LogHelper.Write(ex.ToString());
82 }
83 }
四:在Program类Main方法中调用方法
1、新建几个文件目录用来测试,目录结构如下图
2、编写代码,进行压缩与解压测试,如下
1 using System; 2 using System.IO; 3 4 namespace ConsoleCompressApp 5 { 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 var projectDirectory = Path.GetFullPath("../.."); 11 var directorySeparatorChar = Path.DirectorySeparatorChar; 12 Console.WriteLine("您要压缩Files\\Packages\\git.exe文件么?"); 13 if (Console.ReadLine().Trim().ToLower()=="yes") 14 { 15 SharpZipLibHelper.CompressFile( 16 fileName: projectDirectory + directorySeparatorChar + "Files" + directorySeparatorChar + 17 "Packages" + directorySeparatorChar + "git.exe", 18 compressedFilePath: projectDirectory + directorySeparatorChar + "ZipFiles", 19 aliasFileName: "", 20 compressionLevel: 8, 21 blockSize: 2048, 22 isEncrypt: true, 23 encryptPassword: "123"); 24 } 25 Console.WriteLine("您要压缩Files整个目录么?"); 26 if (Console.ReadLine().Trim().ToLower() == "yes") 27 { 28 SharpZipLibHelper.CompressDirectory( 29 directory: projectDirectory + directorySeparatorChar + "Files", 30 compressedDirectory: projectDirectory + directorySeparatorChar + "ZipDirectory", 31 aliasFileName: "Files", 32 isEncrypt: true, 33 encryptPassword: "456"); 34 } 35 Console.WriteLine("您要将ZipDirectory中的Files.zip解压缩到UnZipFiles目录中么?"); 36 if (Console.ReadLine().Trim().ToLower() == "yes") 37 { 38 SharpZipLibHelper.UnCompressFile(compressedFile: projectDirectory + directorySeparatorChar + 39 "ZipDirectory" + directorySeparatorChar + "Files.zip", 40 directory: projectDirectory + directorySeparatorChar + "UnZipFiles", 41 encryptPassword: "456"); 42 } 43 Console.WriteLine("恭喜您,操作完成了!"); 44 Console.ReadLine(); 45 } 46 } 47 }
3、点击启动,进行测试,结果如下:
文件目录如下
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式