一、使用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. C#连接、访问MySQL数据库

    一.准备工具 visual stuido(本示例使用visual studio 2010) MySql.Data.dll mysql_installer_community_V5.6.21.1_set ...

  2. ip输入框键入.或者合法数字自动选择下一个输入框效果

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...

  3. ExecuteNonQuery&& ExecuteQuery 区别

    前些日子作一些数据项目的时候 在ADO.NET 中处理 ExecuteNonQuery()方法时,总是通过判断其返回值是否大于0来判断操作时候成功 .但是实际上并不是这样的,好在处理的数据操作多时 修 ...

  4. iOS+Swift: 使用MessageUI.framework发送短信

    在iOS中, 可以使用MessageUI.framework框架发送短信, 步骤如下: 代码下载http://git.oschina.net/yao_yu/swift_cnblogs_samples/ ...

  5. 配置公网的域名绑定IP

    1. 在万网.美橙申请了一个域名,当然付完费了.   2. 点击"管理",找到了域名解析   3. 点击"域名解析"   注意"记录值",这 ...

  6. 安卓天天练练(十一)用list绑数据

    之前在练练ListView的时候就有个 BaseAdapter ba = new BaseAdapter() { 用Adapter来绑数据的方法,该方法中 LinearLayout ll=new Li ...

  7. 安卓天天练练(三)常用组件Toast

    要写几句java package com.narumi.android_7_2; import android.app.Activity; import android.os.Bundle; impo ...

  8. 如何与 DevOps 为伍?

    DevOps 是一个席卷 IT 界的新术语.但它究竟是什么,南非的公司们如何利用它来加快高品质应用程序的开发速度?国外知名博客作者凯西·吉布森找到了一些答案. 其实 DevOps 这个词已经火了一段时 ...

  9. Cow Contest

    poj3660:http://poj.org/problem?id=3660 题意:一些奶牛之间进行编程比赛,每头牛都有一个编程能力.如果a的能力比b的能力高,则a总能打败b .现在给你一些牛之间的比 ...

  10. 用JQUERY的deferred异步按顺序调用后端API

    花了两天啊,想办法. 顺便,DJANGO分页的东东也熟悉了下. 如果不用最新的deferred这个东东,那我们以前传统的链式异步调用代码很难看,且长. 以下这个东东未作优化代码封装. this的参数用 ...