当前位置: 首页 > news >正文

.NET I/O 学习笔记:对文件和目录进行解压缩操作

  对文件和目录进行解压缩是一个非常常见的操作,在.NET Framework中为我们提供了:GZipStream类来对文件进行解压缩操作。此类表示 GZip 数据格式,它使用无损压缩和解压缩文件的行业标准算法。GZip 数据格式使用的算法与 DeflateStream 类的算法相同,但它可以扩展以使用其他压缩格式。 这种格式可以通过不涉及专利使用权的方式轻松实现。DeflateStream 和 GZipStream 中的压缩功能作为流公开。 由于数据是以逐字节的方式读取的,因此无法通过进行多次传递来确定压缩整个文件或大型数据块的最佳方法。 对于未压缩的数据源,最好使用DeflateStream类。如果源数据已压缩,则使用这些类时实际上可能会增加流的大小。

单个文件进行解压缩 

View Code
 1         /// <summary>
 2         ///单个文件压缩
 3         /// </summary>
 4         /// <param name="fi"></param>
 5         public static void Compress(FileInfo fi)
 6         {
 7             using (FileStream inFile = fi.OpenRead())
 8             {
 9                 if ((File.GetAttributes(fi.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fi.Extension != ".gz")
10                 {
11                     using (FileStream outFile = File.Create(fi.FullName + ".gz"))
12                     {
13                         using (GZipStream compress = new GZipStream(outFile, CompressionMode.Compress))
14                         {
15                             inFile.CopyTo(compress);
16                             Console.WriteLine("Compressed {0} from {1} to {2} bytes.", fi.Name, fi.Length.ToString(), outFile.Length.ToString());
17                         }
18                     }
19                 }
20             }
21         }
22 
23         /// <summary>
24         /// 单个文件解压
25         /// </summary>
26         /// <param name="fi"></param>
27         public static void Decompress(FileInfo fi)
28         {
29             using (FileStream inFile = fi.OpenRead())
30             {
31                 string curFile = fi.FullName;
32                 string origName = curFile.Remove(curFile.Length - fi.Extension.Length);
33 
34                 using (FileStream outFile = File.Create(origName))
35                 {
36                     using (GZipStream decompress = new GZipStream(inFile, CompressionMode.Decompress))
37                     {
38                         decompress.CopyTo(outFile);
39                         Console.WriteLine("Decompressed: {0}", fi.Name);
40                     }
41                 }
42             }
43         }

 

多个文件和目录解压缩

  GZipStream类只提供了对单个文件进行解压缩,对于多个文件和目录进行解压缩操作需要自己添加代码来实现。实现可以参考下面的示例程序。点击这里:下载示例

 

参考资料:

http://msdn.microsoft.com/zh-cn/library/system.io.compression.gzipstream(v=vs.100)

http://www.cnblogs.com/huihui0630/archive/2009/12/04/1617332.html

相关文章:

  • C++ new和delete动态分配和释放内存
  • C++ 类对象与类指针(静态和动态多态)
  • 第六天 if if…else 三木运算符
  • C++ 虚函数与多态性
  • pb11.2build8949 数据窗口dw limit有关问题
  • VS 监视功能
  • C++ 抽象类
  • C++ 运算符重载
  • 购买Microsoft Technet订阅,免费获得微软几乎所有的产品序列号“用于评估”,...
  • C++ 操作符重载
  • 客户端调用webservice的两种方式
  • C++ 多继承
  • redmine 主题thems-默认主题
  • C++ 虚继承
  • C++ 错误处理和调试(编写代码前的准备工作)
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • android 一些 utils
  • js对象的深浅拷贝
  • JS实现简单的MVC模式开发小游戏
  • leetcode386. Lexicographical Numbers
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Otto开发初探——微服务依赖管理新利器
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Spring-boot 启动时碰到的错误
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • v-if和v-for连用出现的问题
  • Vue UI框架库开发介绍
  • Vue 重置组件到初始状态
  • 基于web的全景—— Pannellum小试
  • 深度学习在携程攻略社区的应用
  • 使用SAX解析XML
  • 我的面试准备过程--容器(更新中)
  • 自制字幕遮挡器
  • 《天龙八部3D》Unity技术方案揭秘
  • 正则表达式-基础知识Review
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​secrets --- 生成管理密码的安全随机数​
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (万字长文)Spring的核心知识尽揽其中
  • (一)80c52学习之旅-起始篇
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .chm格式文件如何阅读
  • .htaccess配置常用技巧
  • .net wcf memory gates checking failed
  • .net知识和学习方法系列(二十一)CLR-枚举
  • @Autowired和@Resource装配
  • @Controller和@RestController的区别?