C#使用SharpZipLib的方法

发布时间:2021-06-16 14:15:30 作者:chen
来源:亿速云 阅读:228

本篇内容介绍了“C#使用SharpZipLib的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

学习C#语言时,经常会遇到文件的压缩和解压缩问题,这里将介绍C#使用SharpZipLib进行文件的压缩和解压缩。

C#使用SharpZipLib进行文件的压缩和解压缩

我在做项目的时候需要将文件进行压缩和解压缩,于是就从http://www.icsharpcode.net下载了关于压缩和解压缩的源码,但是下载下来后,面对这么多的代码,一时不知如何下手。只好耐下心来,慢慢的研究,总算找到了门路。针对自己的需要改写了文件压缩和解压缩的两个类,分别为 ZipClass和UnZipClass。其中碰到了不少困难,就决定写出来压缩和解压的程序后,一定把源码贴出来共享,让***接触压缩和解压缩的朋友可以少走些弯路。下面就来解释如何在C#使用SharpZipLib进行文件的压缩和解压缩。

首先需要在项目里引用sharpziplib.dll。然后修改其中的关于压缩和解压缩的类。实现源码如下:

  1. /// <summary> 

  2. /// 压缩文件  

  3. /// </summary> 

  4.  

  5. using System;  

  6. using System.IO;  

  7.  

  8. using ICSharpCode.SharpZipLib.Checksums;  

  9. using ICSharpCode.SharpZipLib.Zip;  

  10. using ICSharpCode.SharpZipLib.GZip;  

  11.  

  12. namespace Compression  

  13. {  

  14. public class ZipClass  

  15. {  

  16.  

  17. public void ZipFile(string FileToZip, string ZipedFile ,
    int CompressionLevel, int BlockSize)  

  18. {  

  19. //如果文件没有找到,则报错  

  20. if (! System.IO.File.Exists(FileToZip))  

  21. {  

  22. throw new System.IO.FileNotFoundException
    ("The specified file " + FileToZip + " could not be found. Zipping aborderd");  

  23. }  

  24.  

  25. system.io.filestream StreamToZip = new System.IO.FileStream
    (FileToZip,System.IO.FileMode.Open , System.IO.FileAccess.Read);  

  26. System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);  

  27. ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);  

  28. ZipEntry ZipEntry = new ZipEntry("ZippedFile");  

  29. ZipStream.PutNextEntry(ZipEntry);  

  30. ZipStream.SetLevel(CompressionLevel);  

  31. byte[] buffer = new byte[BlockSize];  

  32. System.Int32 size =StreamToZip.Read(buffer,0,buffer.Length);  

  33. ZipStream.Write(buffer,0,size);  

  34. try  

  35. {  

  36. while (size < StreamToZip.Length)  

  37. {  

  38. int sizeRead =StreamToZip.Read(buffer,0,buffer.Length);  

  39. ZipStream.Write(buffer,0,sizeRead);  

  40. size += sizeRead;  

  41. }  

  42. }  

  43. catch(System.Exception ex)  

  44. {  

  45. throw ex;  

  46. }  

  47. ZipStream.Finish();  

  48. ZipStream.Close();  

  49. StreamToZip.Close();  

  50. }  

  51.  

  52. public void ZipFileMain(string[] args)  

  53. {  

  54. string[] filenames = Directory.GetFiles(args[0]);  

  55.  

  56. crc32 crc = new Crc32();  

  57. ZipOutputStream s = new ZipOutputStream(File.Create(args[1]));  

  58.  

  59. s.setlevel(6); // 0 - store only to 9 - means best compression  

  60.  

  61. foreach (string file in filenames)  

  62. {  

  63. //打开压缩文件  

  64. FileStream fs = File.OpenRead(file);  

  65.  

  66. byte[] buffer = new byte[fs.Length];  

  67. fs.Read(buffer, 0, buffer.Length);  

  68. ZipEntry entry = new ZipEntry(file);  

  69.  

  70. entry.datetime = DateTime.Now;  

  71.  

  72. // set Size and the crc, because the information  

  73. // about the size and crc should be stored in the header  

  74. // if it is not set it is automatically written in the footer.  

  75. // (in this case size == crc == -1 in the header)  

  76. // Some ZIP programs have problems with zip files that don't store  

  77. // the size and crc in the header.  

  78. entry.Size = fs.Length;  

  79. fs.Close();  

  80.  

  81. crc.reset();  

  82. crc.Update(buffer);  

  83.  

  84. entry.crc = crc.Value;  

  85.  

  86. s.putnextentry(entry);  

  87.  

  88. s.write(buffer, 0, buffer.Length);  

  89.  

  90. }  

  91.  

  92. s.finish();  

  93. s.Close();  

  94. }  

  95. }  

  96. }  

  97.  

  98. 现在再来看看解压文件类的源码  

  99.  

  100. /// <summary> 

  101. /// 解压文件  

  102. /// </summary> 

  103.  

  104. using System;  

  105. using System.Text;  

  106. using System.Collections;  

  107. using System.IO;  

  108. using System.Diagnostics;  

  109. using System.Runtime.Serialization.Formatters.Binary;  

  110. using System.Data;  

  111.  

  112. using ICSharpCode.SharpZipLib.BZip2;  

  113. using ICSharpCode.SharpZipLib.Zip;  

  114. using ICSharpCode.SharpZipLib.Zip.Compression;  

  115. using ICSharpCode.SharpZipLib.Zip.Compression.Streams;  

  116. using ICSharpCode.SharpZipLib.GZip;  

  117.  

  118. namespace DeCompression  

  119. {  

  120. public class UnZipClass  

  121. {  

  122. public void UnZip(string[] args)  

  123. {  

  124. ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]));  

  125.  

  126. zipentry theEntry;  

  127. while ((theEntry = s.GetNextEntry()) != null)  

  128. {  

  129.  

  130. string directoryName = Path.GetDirectoryName(args[1]);  

  131. string fileName = Path.GetFileName(theEntry.Name);  

  132.  

  133. //生成解压目录  

  134. Directory.CreateDirectory(directoryName);  

  135.  

  136. if (fileName != String.Empty)  

  137. {  

  138. //解压文件到指定的目录  

  139. FileStream streamWriter = File.Create(args[1]+theEntry.Name);  

  140.  

  141. int size = 2048;  

  142. byte[] data = new byte[2048];  

  143. while (true)  

  144. {  

  145. ssize = s.Read(data, 0, data.Length);  

  146. if (size > 0)  

  147. {  

  148. streamWriter.Write(data, 0, size);  

  149. }  

  150. else  

  151. {  

  152. break;  

  153. }  

  154. }  

  155.  

  156. streamwriter.close();  

  157. }  

  158. }  

  159. s.Close();  

  160. }  

  161. }  

  162. }  

“C#使用SharpZipLib的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. C#集合的使用方法
  2. C#工具类:使用SharpZipLib进行压缩、解压文件

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:前端实现“隐藏的方式”的区别有哪些

下一篇:Java 中有哪些引用类型

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》