温馨提示×

温馨提示×

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

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

C#使用SharpZipLib的方法

发布时间:2021-06-16 14:15:30 阅读:242 作者:chen 栏目:编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

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

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

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

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

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

/// <summary> /// 压缩文件  /// </summary> using System;  using System.IO;  using ICSharpCode.SharpZipLib.Checksums;  using ICSharpCode.SharpZipLib.Zip;  using ICSharpCode.SharpZipLib.GZip;  namespace Compression  {  public class ZipClass  {  public void ZipFile(string FileToZip, string ZipedFile ,int CompressionLevel, int BlockSize)  {  //如果文件没有找到,则报错  if (! System.IO.File.Exists(FileToZip))  {  throw new System.IO.FileNotFoundException("The specified file " + FileToZip + " could not be found. Zipping aborderd");  }  system.io.filestream StreamToZip = new System.IO.FileStream(FileToZip,System.IO.FileMode.Open , System.IO.FileAccess.Read);  System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);  ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);  ZipEntry ZipEntry = new ZipEntry("ZippedFile");  ZipStream.PutNextEntry(ZipEntry);  ZipStream.SetLevel(CompressionLevel);  byte[] buffer = new byte[BlockSize];  System.Int32 size =StreamToZip.Read(buffer,0,buffer.Length);  ZipStream.Write(buffer,0,size);  try  {  while (size < StreamToZip.Length)  {  int sizeRead =StreamToZip.Read(buffer,0,buffer.Length);  ZipStream.Write(buffer,0,sizeRead);  size += sizeRead;  }  }  catch(System.Exception ex)  {  throw ex;  }  ZipStream.Finish();  ZipStream.Close();  StreamToZip.Close();  }  public void ZipFileMain(string[] args)  {  string[] filenames = Directory.GetFiles(args[0]);  crc32 crc = new Crc32();  ZipOutputStream s = new ZipOutputStream(File.Create(args[1]));  s.setlevel(6); // 0 - store only to 9 - means best compression  foreach (string file in filenames)  {  //打开压缩文件  FileStream fs = File.OpenRead(file);  byte[] buffer = new byte[fs.Length];  fs.Read(buffer, 0, buffer.Length);  ZipEntry entry = new ZipEntry(file);  entry.datetime = DateTime.Now;  // set Size and the crc, because the information  // about the size and crc should be stored in the header  // if it is not set it is automatically written in the footer.  // (in this case size == crc == -1 in the header)  // Some ZIP programs have problems with zip files that don't store  // the size and crc in the header.  entry.Size = fs.Length;  fs.Close();  crc.reset();  crc.Update(buffer);  entry.crc = crc.Value;  s.putnextentry(entry);  s.write(buffer, 0, buffer.Length);  }  s.finish();  s.Close();  }  }  }  现在再来看看解压文件类的源码  /// <summary> /// 解压文件  /// </summary> using System;  using System.Text;  using System.Collections;  using System.IO;  using System.Diagnostics;  using System.Runtime.Serialization.Formatters.Binary;  using System.Data;  using ICSharpCode.SharpZipLib.BZip2;  using ICSharpCode.SharpZipLib.Zip;  using ICSharpCode.SharpZipLib.Zip.Compression;  using ICSharpCode.SharpZipLib.Zip.Compression.Streams;  using ICSharpCode.SharpZipLib.GZip;  namespace DeCompression  {  public class UnZipClass  {  public void UnZip(string[] args)  {  ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]));  zipentry theEntry;  while ((theEntry = s.GetNextEntry()) != null)  {  string directoryName = Path.GetDirectoryName(args[1]);  string fileName = Path.GetFileName(theEntry.Name);  //生成解压目录  Directory.CreateDirectory(directoryName);  if (fileName != String.Empty)  {  //解压文件到指定的目录  FileStream streamWriter = File.Create(args[1]+theEntry.Name);  int size = 2048;  byte[] data = new byte[2048];  while (true)  {  ssize = s.Read(data, 0, data.Length);  if (size > 0)  {  streamWriter.Write(data, 0, size);  }  else  {  break;  }  }  streamwriter.close();  }  }  s.Close();  }  }  }  

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

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

向AI问一下细节

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

AI

开发者交流群×