在企业开发过程中经常会遇到文件的压缩与解压,虽然网上很多流行的压缩文件格式都是RAR的,但是由于RAR不是一个开放的标准,因此ZIP成了更多人的选择。如果你不想自己开发的话可以选择开源的项目,比如SharpZipLib就是一个不错的选择。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.IO;
  5. using ICSharpCode.SharpZipLib.Zip;
  6. using System.Diagnostics;
  7. using ICSharpCode.SharpZipLib.Core;
  8.  
  9. namespace TestConsole
  10. {
  11. class Program
  12. {
  13. static void Main()
  14. {
  15. //CreateZipFile(@"d:\", @"d:\a.zip");
  16. UnZipFile(@"d:\a.zip");
  17.  
  18. Console.Read();
  19. }
  20.  
  21. private static void CreateZipFile(string filesPath, string zipFilePath)
  22. {
  23.  
  24. if (!Directory.Exists(filesPath))
  25. {
  26. Console.WriteLine("Cannot find directory '{0}'", filesPath);
  27. return;
  28. }
  29.  
  30. try
  31. {
  32. string[] filenames = Directory.GetFiles(filesPath);
  33. using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFilePath)))
  34. {
  35.  
  36. s.SetLevel(); // 压缩级别 0-9
  37. //s.Password = "123"; //Zip压缩文件密码
  38. byte[] buffer = new byte[]; //缓冲区大小
  39. foreach (string file in filenames)
  40. {
  41. ZipEntry entry = new ZipEntry(Path.GetFileName(file));
  42. entry.DateTime = DateTime.Now;
  43. s.PutNextEntry(entry);
  44. using (FileStream fs = File.OpenRead(file))
  45. {
  46. int sourceBytes;
  47. do
  48. {
  49. sourceBytes = fs.Read(buffer, , buffer.Length);
  50. s.Write(buffer, , sourceBytes);
  51. } while (sourceBytes > );
  52. }
  53. }
  54. s.Finish();
  55. s.Close();
  56. }
  57. }
  58. catch (Exception ex)
  59. {
  60. Console.WriteLine("Exception during processing {0}", ex);
  61. }
  62. }
  63.  
  64. private static void UnZipFile( string zipFilePath)
  65. {
  66. if (!File.Exists(zipFilePath))
  67. {
  68. Console.WriteLine("Cannot find file '{0}'", zipFilePath);
  69. return;
  70. }
  71.  
  72. using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
  73. {
  74.  
  75. ZipEntry theEntry;
  76. while ((theEntry = s.GetNextEntry()) != null)
  77. {
  78.  
  79. Console.WriteLine(theEntry.Name);
  80.  
  81. string directoryName = Path.GetDirectoryName(theEntry.Name);
  82. string fileName = Path.GetFileName(theEntry.Name);
  83.  
  84. // create directory
  85. if (directoryName.Length > )
  86. {
  87. Directory.CreateDirectory(directoryName);
  88. }
  89.  
  90. if (fileName != String.Empty)
  91. {
  92. using (FileStream streamWriter = File.Create(theEntry.Name))
  93. {
  94.  
  95. int size = ;
  96. byte[] data = new byte[];
  97. while (true)
  98. {
  99. size = s.Read(data, , data.Length);
  100. if (size > )
  101. {
  102. streamWriter.Write(data, , size);
  103. }
  104. else
  105. {
  106. break;
  107. }
  108. }
  109. }
  110. }
  111. }
  112. }
  113. }
  114. }
  115. }

C# 文件压缩与解压(ZIP格式)的更多相关文章

  1. Java实现文件压缩与解压[zip格式,gzip格式]

    Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例. zip扮演着归档和压缩两个角色:gzip并 ...

  2. 文件压缩、解压工具类。文件压缩格式为zip

    package com.JUtils.file; import java.io.BufferedOutputStream; import java.io.File; import java.io.Fi ...

  3. 使用SharpZipLib实现文件压缩、解压

    接口 public interface IUnZip { /// <summary> /// 功能:解压zip格式的文件. /// </summary> /// <par ...

  4. linux下压缩与解压(zip、unzip、tar)详解

    linux下压缩与解压(zip.unzip.tar)详解 2012-05-09 13:58:39| 分类: linux | 标签:linux zip unzip tar linux命令详解 |举报|字 ...

  5. CSharp tar类型文件压缩与解压

    最近闲暇时间开始写点通用基础类在写到tar类型文件压缩与解压时遇到点问题 压缩用的类库我是下载的 SharpZipLib_0860版本 先上代码 加压核心 /// <summary> // ...

  6. Linux之文件压缩与解压

    文件压缩与解压 1.tar命令 tar命令可以为Linux的文件和目录创建档案. 利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件.tar最初被用来 ...

  7. I/O操作之文件压缩与解压

    与文件压缩与解压相关的类在java.util.zip包下 实例 //文件压缩 import java.io.File; import java.io.FileInputStream; import j ...

  8. 文件压缩跟解压(本地&Linux服务器)

    远程解压需要的jar包: <dependency> <groupId>commons-net</groupId> <artifactId>commons ...

  9. Java实现文件压缩与解压

    Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例.(转载自http://www.puiedu. ...

随机推荐

  1. OpenJudge计算概论-寻找下标

    /*======================================================================== 寻找下标 总时间限制: 1000ms 内存限制: ...

  2. CentOS6.5 yum安装 apache+svn安装配置

    首页是关于svn的备份和还原 比较快捷的方式: 备份:svnadmin hotcopy /opt/svn/svntest/ /var/tmp/svntest_20120604 --clean-logs ...

  3. WEB用户访问控制方法

    分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 一直以来,我对用户/权 ...

  4. Angular学习(1)

    天天都是hello world,老子玩1+1. 最简单的例子,见证无聊的时刻: <!DOCTYPE html> <html> <head> <title> ...

  5. JS request函数 用来获取url参数

    function request(strParame) { var args = new Object( ); var query = location.search.substring(1); va ...

  6. MySQL数据库MyISAM和InnoDB存储引擎的比较

    MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种.这里介绍关于这两种引擎的一些基本概念(非深入介绍). MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索 ...

  7. Thinkpad X240修改bios引导方式

    来源:http://blog.csdn.net/jsship/article/details/19121149 修改笔记本的BIOS设置!这是非常重要的步骤之一.否则,你的U盘不能引导手提电脑进入PE ...

  8. Linux常用命令记录

    产用Linux命令 cat /proc/partitions //查看系统分区情况 fdisk -l /dev/sdb //查看磁盘物理存储 mount /dev/目录 /mnt/目录 //挂载文件 ...

  9. Env:autojump安装使用

    注:这里只介绍我使用的方式,当然不是唯一方式 作用:autojump可以快速进行路径导航,具备记忆历史路径:不仅仅是可以进入当前路径下的某个路径,也可以是其他历史路径 1. 下载 首先,$ git c ...

  10. Java面试必备知识2

    1 .三个Statment区别,用法 Statement,基本的:PreparedStatement是可编译的,提高效率,callablestatement,存储过程 2 .Cookie 答:临时co ...