一、使用ICSharpCode.SharpZipLib.dll;

下载地址

http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx

二、基于(ICSharpCode.SharpZipLib.dll)的文件压缩方法,类文件

压缩文件

  1. using System;
  2. using System.IO;
  3. using System.Collections;
  4. using ICSharpCode.SharpZipLib.Checksums;
  5. using ICSharpCode.SharpZipLib.Zip;
  6. namespace FileCompress
  7. {
  8. /// <summary>
  9. /// 功能:压缩文件
  10. /// creator chaodongwang 2009-11-11
  11. /// </summary>
  12. public class ZipClass
  13. {
  14. /// <summary>
  15. /// 压缩单个文件
  16. /// </summary>
  17. /// <param name="FileToZip">被压缩的文件名称(包含文件路径)</param>
  18. /// <param name="ZipedFile">压缩后的文件名称(包含文件路径)</param>
  19. /// <param name="CompressionLevel">压缩率0(无压缩)-9(压缩率最高)</param>
  20. /// <param name="BlockSize">缓存大小</param>
  21. public void ZipFile(string FileToZip, string ZipedFile, int CompressionLevel)
  22. {
  23. //如果文件没有找到,则报错
  24. if (!System.IO.File.Exists(FileToZip))
  25. {
  26. throw new System.IO.FileNotFoundException("文件:" + FileToZip + "没有找到!");
  27. }
  28. if (ZipedFile == string.Empty)
  29. {
  30. ZipedFile = Path.GetFileNameWithoutExtension(FileToZip) + ".zip";
  31. }
  32. if (Path.GetExtension(ZipedFile) != ".zip")
  33. {
  34. ZipedFile = ZipedFile + ".zip";
  35. }
  36. ////如果指定位置目录不存在,创建该目录
  37. //string zipedDir = ZipedFile.Substring(0,ZipedFile.LastIndexOf("/"));
  38. //if (!Directory.Exists(zipedDir))
  39. //    Directory.CreateDirectory(zipedDir);
  40. //被压缩文件名称
  41. string filename = FileToZip.Substring(FileToZip.LastIndexOf('//') + 1);
  42. System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read);
  43. System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);
  44. ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
  45. ZipEntry ZipEntry = new ZipEntry(filename);
  46. ZipStream.PutNextEntry(ZipEntry);
  47. ZipStream.SetLevel(CompressionLevel);
  48. byte[] buffer = new byte[2048];
  49. System.Int32 size = StreamToZip.Read(buffer, 0, buffer.Length);
  50. ZipStream.Write(buffer, 0, size);
  51. try
  52. {
  53. while (size < StreamToZip.Length)
  54. {
  55. int sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);
  56. ZipStream.Write(buffer, 0, sizeRead);
  57. size += sizeRead;
  58. }
  59. }
  60. catch (System.Exception ex)
  61. {
  62. throw ex;
  63. }
  64. finally
  65. {
  66. ZipStream.Finish();
  67. ZipStream.Close();
  68. StreamToZip.Close();
  69. }
  70. }
  71. /// <summary>
  72. /// 压缩文件夹的方法
  73. /// </summary>
  74. public void ZipDir(string DirToZip, string ZipedFile, int CompressionLevel)
  75. {
  76. //压缩文件为空时默认与压缩文件夹同一级目录
  77. if (ZipedFile == string.Empty)
  78. {
  79. ZipedFile = DirToZip.Substring(DirToZip.LastIndexOf("/") + 1);
  80. ZipedFile = DirToZip.Substring(0, DirToZip.LastIndexOf("/")) +"//"+ ZipedFile+".zip";
  81. }
  82. if (Path.GetExtension(ZipedFile) != ".zip")
  83. {
  84. ZipedFile = ZipedFile + ".zip";
  85. }
  86. using (ZipOutputStream zipoutputstream = new ZipOutputStream(File.Create(ZipedFile)))
  87. {
  88. zipoutputstream.SetLevel(CompressionLevel);
  89. Crc32 crc = new Crc32();
  90. Hashtable fileList = getAllFies(DirToZip);
  91. foreach (DictionaryEntry item in fileList)
  92. {
  93. FileStream fs = File.OpenRead(item.Key.ToString());
  94. byte[] buffer = new byte[fs.Length];
  95. fs.Read(buffer, 0, buffer.Length);
  96. ZipEntry entry = new ZipEntry(item.Key.ToString().Substring(DirToZip.Length + 1));
  97. entry.DateTime = (DateTime)item.Value;
  98. entry.Size = fs.Length;
  99. fs.Close();
  100. crc.Reset();
  101. crc.Update(buffer);
  102. entry.Crc = crc.Value;
  103. zipoutputstream.PutNextEntry(entry);
  104. zipoutputstream.Write(buffer, 0, buffer.Length);
  105. }
  106. }
  107. }
  108. /// <summary>
  109. /// 获取所有文件
  110. /// </summary>
  111. /// <returns></returns>
  112. private Hashtable getAllFies(string dir)
  113. {
  114. Hashtable FilesList = new Hashtable();
  115. DirectoryInfo fileDire = new DirectoryInfo(dir);
  116. if (!fileDire.Exists)
  117. {
  118. throw new System.IO.FileNotFoundException("目录:" + fileDire.FullName + "没有找到!");
  119. }
  120. this.getAllDirFiles(fileDire, FilesList);
  121. this.getAllDirsFiles(fileDire.GetDirectories(), FilesList);
  122. return FilesList;
  123. }
  124. /// <summary>
  125. /// 获取一个文件夹下的所有文件夹里的文件
  126. /// </summary>
  127. /// <param name="dirs"></param>
  128. /// <param name="filesList"></param>
  129. private void getAllDirsFiles(DirectoryInfo[] dirs, Hashtable filesList)
  130. {
  131. foreach (DirectoryInfo dir in dirs)
  132. {
  133. foreach (FileInfo file in dir.GetFiles("*.*"))
  134. {
  135. filesList.Add(file.FullName, file.LastWriteTime);
  136. }
  137. this.getAllDirsFiles(dir.GetDirectories(), filesList);
  138. }
  139. }
  140. /// <summary>
  141. /// 获取一个文件夹下的文件
  142. /// </summary>
  143. /// <param name="strDirName">目录名称</param>
  144. /// <param name="filesList">文件列表HastTable</param>
  145. private void getAllDirFiles(DirectoryInfo dir, Hashtable filesList)
  146. {
  147. foreach (FileInfo file in dir.GetFiles("*.*"))
  148. {
  149. filesList.Add(file.FullName, file.LastWriteTime);
  150. }
  151. }
  152. }
  153. }

解压文件

  1. using System;
  2. using System.Collections.Generic;
  3. /// <summary>
  4. /// 解压文件
  5. /// </summary>
  6. using System;
  7. using System.Text;
  8. using System.Collections;
  9. using System.IO;
  10. using System.Diagnostics;
  11. using System.Runtime.Serialization.Formatters.Binary;
  12. using System.Data;
  13. using ICSharpCode.SharpZipLib.Zip;
  14. using ICSharpCode.SharpZipLib.Zip.Compression;
  15. using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
  16. namespace FileCompress
  17. {
  18. /// <summary>
  19. /// 功能:解压文件
  20. /// creator chaodongwang 2009-11-11
  21. /// </summary>
  22. public class UnZipClass
  23. {
  24. /// <summary>
  25. /// 功能:解压zip格式的文件。
  26. /// </summary>
  27. /// <param name="zipFilePath">压缩文件路径</param>
  28. /// <param name="unZipDir">解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹</param>
  29. /// <param name="err">出错信息</param>
  30. /// <returns>解压是否成功</returns>
  31. public void UnZip(string zipFilePath, string unZipDir)
  32. {
  33. if (zipFilePath == string.Empty)
  34. {
  35. throw new Exception("压缩文件不能为空!");
  36. }
  37. if (!File.Exists(zipFilePath))
  38. {
  39. throw new System.IO.FileNotFoundException("压缩文件不存在!");
  40. }
  41. //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹
  42. if (unZipDir == string.Empty)
  43. unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
  44. if (!unZipDir.EndsWith("/"))
  45. unZipDir += "/";
  46. if (!Directory.Exists(unZipDir))
  47. Directory.CreateDirectory(unZipDir);
  48. using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
  49. {
  50. ZipEntry theEntry;
  51. while ((theEntry = s.GetNextEntry()) != null)
  52. {
  53. string directoryName = Path.GetDirectoryName(theEntry.Name);
  54. string fileName = Path.GetFileName(theEntry.Name);
  55. if (directoryName.Length > 0)
  56. {
  57. Directory.CreateDirectory(unZipDir + directoryName);
  58. }
  59. if (!directoryName.EndsWith("/"))
  60. directoryName += "/";
  61. if (fileName != String.Empty)
  62. {
  63. using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name))
  64. {
  65. int size = 2048;
  66. byte[] data = new byte[2048];
  67. while (true)
  68. {
  69. size = s.Read(data, 0, data.Length);
  70. if (size > 0)
  71. {
  72. streamWriter.Write(data, 0, size);
  73. }
  74. else
  75. {
  76. break;
  77. }
  78. }
  79. }
  80. }
  81. }
  82. }
  83. }
  84. }
  85. }

ICSharpCode.SharpZipLib压缩解压的更多相关文章

  1. .NET使用ICSharpCode.SharpZipLib压缩/解压文件

    SharpZipLib是国外开源加压解压库,可以方便的对文件进行加压/解压 1.下载ICSharpCode.SharpZipLib.dll,并复制到bin目录下 http://www.icsharpc ...

  2. SharpZipLib压缩解压

    一.介绍 SharpZipLib是一个完全由C#编写的ZIP,GZIP,Tar和BZIP2 Library,可以方便的支持这几种格式的压缩和解压缩. https://github.com/icshar ...

  3. SharpZipLib压缩解压的使用

    项目中使用 Velocity 将模板和生成的动态内容(HTML.XML等)合并保存到redis数据库中,考虑到压缩的文件容量会比较小,方便传输而且存储所使用的空间也会比较小,所以要压缩一下,读取的时候 ...

  4. C#基础知识之SharpZipLib压缩解压的使用

    项目中使用 Velocity 将模板和生成的动态内容(HTML.XML等)合并保存到redis数据库中,考虑到压缩的文件容量会比较小,方便传输而且存储所使用的空间也会比较小,所以要压缩一下,读取的时候 ...

  5. C#使用SharpZipLib压缩解压文件

    #region 加压解压方法 /// <summary> /// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略) /// </summary> // ...

  6. 通过SharpZipLib来压缩解压文件

    在项目开发中,一些比较常用的功能就是压缩解压文件了,其实类似的方法有许多 ,现将通过第三方类库SharpZipLib来压缩解压文件的方法介绍如下,主要目的是方便以后自己阅读,当然可以帮到有需要的朋友更 ...

  7. 使用SharpZIpLib写的压缩解压操作类

    使用SharpZIpLib写的压缩解压操作类,已测试. public class ZipHelper { /// <summary> /// 压缩文件 /// </summary&g ...

  8. (转载)C#压缩解压zip 文件

    转载之: C#压缩解压zip 文件 - 大气象 - 博客园http://www.cnblogs.com/greatverve/archive/2011/12/27/csharp-zip.html C# ...

  9. 使用C#压缩解压rar和zip格式文件

    为了便于文件在网络中的传输和保存,通常将文件进行压缩操作,常用的压缩格式有rar.zip和7z,本文将介绍在C#中如何对这几种类型的文件进行压缩和解压,并提供一些在C#中解压缩文件的开源库. 在C#. ...

随机推荐

  1. CentOS6.3安装VBoxAdditions

    yum update kernel yum install kernel-devel gcc gcc-c++

  2. 关于正则表达式的转义 PHP

    如正则的函数 preg_replace($patern, $replacement, $content) 等等 其中如果 $content 中要替换 \ 成 /,必须在 $patern中写成 \\\\ ...

  3. WPF自定义窗口(Windows Server 2012 Style)

    先上图 新建CustomControl,名:HeaderedWindow Themes\Generic.aml文件夹下加入 笔刷,转换器 <SolidColorBrush x:Key=" ...

  4. Bootstrap_排版_表格

    一.基础表格 <table class="table"> <thead> <tr> <th>表格标题</th> < ...

  5. 【Java多线程与并发库】4.传统线程同步通信技术

    我们先通过一道面试题来了解传统的线程同步通信. 题目:子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程又循环100次,如此循环50次,请写出程序. 我没有看答案, ...

  6. C# C/S系统软件开发平台架构图(原创)

    企业版V4.0 - 架构图 企业版V4.0 - 桥接功能.后台连接策略 桥接功能是指应用策略模式,由用户配置本地INI文件选择ADO直连(ADO-Direct)或者调用WCF服务接口访问远程服务器后台 ...

  7. odoo8 email

    ?? return 地址和 from 地址不一致,为什么不能发送成功? replay地址. 根据对象(比如purchase.order)发送邮件,可以通过supermessage_get_email_ ...

  8. iOS: 学习笔记, Swift名字空间

    在Swift中, 名字空间是用class(extension)嵌套来实现的, 下面用一个简单例子来进行展示 // // main.swift // SwiftNameSpace // // Creat ...

  9. 基于Java的Http服务器几种模式演进

    首先抛出问题: 程序1---错误版本 import java.io.IOException; import java.io.InputStream; import java.io.PrintWrite ...

  10. PC硬件之我见——CPU篇

    写在最前面:     最近身边很多朋友都购置电脑的想法,往往也会选择性价比较高的DIY攒机方式.不幸的是,并不是所有人都对电脑硬件有一定的了解的,何况在现在这种社会风气下,盲目的相信商家是不明智的.所 ...