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

创新互联建站-专业网站定制、快速模板网站建设、高性价比农安网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式农安网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖农安地区。费用合理售后完善,十载实体公司更值得信赖。
C#使用SharpZipLib进行文件的压缩和解压缩
我在做项目的时候需要将文件进行压缩和解压缩,于是就从http://www.icsharpcode.net下载了关于压缩和解压缩的源码,但是下载下来后,面对这么多的代码,一时不知如何下手。只好耐下心来,慢慢的研究,总算找到了门路。针对自己的需要改写了文件压缩和解压缩的两个类,分别为 ZipClass和UnZipClass。其中碰到了不少困难,就决定写出来压缩和解压的程序后,一定把源码贴出来共享,让***接触压缩和解压缩的朋友可以少走些弯路。下面就来解释如何在C#使用SharpZipLib进行文件的压缩和解压缩。
首先需要在项目里引用sharpziplib.dll。然后修改其中的关于压缩和解压缩的类。实现源码如下:
- ///
 - /// 压缩文件
 - ///
 - 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();
 - }
 - }
 - }
 - 现在再来看看解压文件类的源码
 - ///
 - /// 解压文件
 - ///
 - 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分析
                
                文章源于:http://www.csdahua.cn/qtweb/news20/265620.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网