C#使用SharpZipLib的方法

发布时间:2021-06-16 14:15:30 作者:chen
阅读:244
开发者专用服务器限时活动,0元免费领! 查看>>

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

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

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

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

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

  1. /// <summary> 

  2. /// 压缩文件  

  3. /// </summary> 

  4. using System;  

  5. using System.IO;  

  6. using ICSharpCode.SharpZipLib.Checksums;  

  7. using ICSharpCode.SharpZipLib.Zip;  

  8. using ICSharpCode.SharpZipLib.GZip;  

  9. namespace Compression  

  10. {  

  11. public class ZipClass  

  12. {  

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

  14. {  

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

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

  17. {  

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

  19. }  

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

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

  22. ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);  

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

  24. ZipStream.PutNextEntry(ZipEntry);  

  25. ZipStream.SetLevel(CompressionLevel);  

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

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

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

  29. try  

  30. {  

  31. while (size < StreamToZip.Length)  

  32. {  

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

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

  35. size += sizeRead;  

  36. }  

  37. }  

  38. catch(System.Exception ex)  

  39. {  

  40. throw ex;  

  41. }  

  42. ZipStream.Finish();  

  43. ZipStream.Close();  

  44. StreamToZip.Close();  

  45. }  

  46. public void ZipFileMain(string[] args)  

  47. {  

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

  49. crc32 crc = new Crc32();  

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

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

  52. foreach (string file in filenames)  

  53. {  

  54. //打开压缩文件  

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

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

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

  58. ZipEntry entry = new ZipEntry(file);  

  59. entry.datetime = DateTime.Now;  

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

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

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

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

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

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

  66. entry.Size = fs.Length;  

  67. fs.Close();  

  68. crc.reset();  

  69. crc.Update(buffer);  

  70. entry.crc = crc.Value;  

  71. s.putnextentry(entry);  

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

  73. }  

  74. s.finish();  

  75. s.Close();  

  76. }  

  77. }  

  78. }  

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

  80. /// <summary> 

  81. /// 解压文件  

  82. /// </summary> 

  83. using System;  

  84. using System.Text;  

  85. using System.Collections;  

  86. using System.IO;  

  87. using System.Diagnostics;  

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

  89. using System.Data;  

  90. using ICSharpCode.SharpZipLib.BZip2;  

  91. using ICSharpCode.SharpZipLib.Zip;  

  92. using ICSharpCode.SharpZipLib.Zip.Compression;  

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

  94. using ICSharpCode.SharpZipLib.GZip;  

  95. namespace DeCompression  

  96. {  

  97. public class UnZipClass  

  98. {  

  99. public void UnZip(string[] args)  

  100. {  

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

  102. zipentry theEntry;  

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

  104. {  

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

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

  107. //生成解压目录  

  108. Directory.CreateDirectory(directoryName);  

  109. if (fileName != String.Empty)  

  110. {  

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

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

  113. int size = 2048;  

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

  115. while (true)  

  116. {  

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

  118. if (size > 0)  

  119. {  

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

  121. }  

  122. else  

  123. {  

  124. break;  

  125. }  

  126. }  

  127. streamwriter.close();  

  128. }  

  129. }  

  130. s.Close();  

  131. }  

  132. }  

  133. }  

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

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

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

开发者交流群:

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

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

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

相关阅读

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

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