一、使用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. asp.net treeview控件无刷新选择和删除节点的ajax方法

    转载 http://blog.csdn.net/luq885/article/details/1621681 如果节点被选择的话,节点所在的td的class属性就会被设置为TreeView1_1.   ...

  2. 《ln命令》-linux命令五分钟系列之十八

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  3. linux上配置subversion服务器端安装配置并使用svn,windows本地检出,设置同步更新服务器的钩子

    参考http://my.oschina.net/junn/blog/164041 http://songxj.blog.51cto.com/620981/396113 http://5iwww.blo ...

  4. 从一个标准 url 里取出文件的扩展名

    在php预定义函数中有一个叫做"pathinfo()"的函数,专门用于返回文件路径信息的. 那好,我们就来看一下它能为我们做些什么?       语法:pathinfo($url_ ...

  5. Winbind authentication against active directory

    Winbind authentication against active directory Description This tip will describe how to configure ...

  6. URL encode 与 URL decode 的C语言实现

    转载自:http://blog.csdn.net/langeldep/article/details/6264058 本文代码为从PHP代码中修改而来,只保留了2个函数. int php_url_de ...

  7. AlertDialog中EditText不能获取焦点以及不宽度不能自动铺满的完美解决方案

    问题分析: 因为 dialog的Attributes使用的默认的,其中一个属性就是:flags ,就是这个属性导致不能获取焦点,默认的是FLAG_NOT_FOCUSABLE,故名思义不能获取输入焦点, ...

  8. MyEclips:Struts 2 + Hibernate 4 + SQL Server2008

    步骤一:准备 1.下载 sqlJDBC.jar的下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=21599 Hibernate ...

  9. SignalR介绍与Asp.net,前台即时通信【转】

    SignalR 是一个asp.net异步库,它提供广播消息到多个client端的机制. SignalR能用来持久客户端与服务端的连接,让我们便于开发一些实时的应用,例如聊天室在线预订系统,股票交易等实 ...

  10. 解决maven打jar包报错 source 1.3 中不支持

    问题:maven在进行打包时,报 '请使用-source 5 或者更高版本以启用XX'的信息并导致打包失败. 原因:maven默认的编译插件的java版本较低,导致其不支持例如泛型,注解等用法. 解决 ...