利用SharpZipLib进行文件的压缩和解压缩

系统 1953 0

首先需要在项目里引用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( " Thespecifiedfile " + FileToZip + " couldnotbefound.Zippingaborderd " );
}


System.IO.FileStreamStreamToZip
= new System.IO.FileStream(FileToZip,System.IO.FileMode.Open,System.IO.FileAccess.Read);
System.IO.FileStreamZipFile
= System.IO.File.Create(ZipedFile);
ZipOutputStreamZipStream
= new ZipOutputStream(ZipFile);
ZipEntryZipEntry
= new ZipEntry( " ZippedFile " );
ZipStream.PutNextEntry(ZipEntry);
ZipStream.SetLevel(CompressionLevel);
byte []buffer = new byte [BlockSize];
System.Int32size
= 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.Exceptionex)
... {
throw ex;
}

ZipStream.Finish();
ZipStream.Close();
StreamToZip.Close();
}


public void ZipFileMain( string []args)
... {
string []filenames = Directory.GetFiles(args[ 0 ]);

Crc32crc
= new Crc32();
ZipOutputStreams
= new ZipOutputStream(File.Create(args[ 1 ]));

s.SetLevel(
6 ); // 0-storeonlyto9-meansbestcompression

foreach ( string file in filenames)
... {
// 打开压缩文件
FileStreamfs = File.OpenRead(file);

byte []buffer = new byte [fs.Length];
fs.Read(buffer,
0 ,buffer.Length);
ZipEntryentry
= new ZipEntry(file);

entry.DateTime
= DateTime.Now;

// setSizeandthecrc,becausetheinformation
// aboutthesizeandcrcshouldbestoredintheheader
// ifitisnotsetitisautomaticallywritteninthefooter.
// (inthiscasesize==crc==-1intheheader)
// SomeZIPprogramshaveproblemswithzipfilesthatdon'tstore
// thesizeandcrcintheheader.
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)
... {
ZipInputStreams
= new ZipInputStream(File.OpenRead(args[ 0 ]));

ZipEntrytheEntry;
while ((theEntry = s.GetNextEntry()) != null )
... {

string directoryName = Path.GetDirectoryName(args[ 1 ]);
string fileName = Path.GetFileName(theEntry.Name);

// 生成解压目录
Directory.CreateDirectory(directoryName);

if (fileName != String.Empty)
... {
// 解压文件到指定的目录
FileStreamstreamWriter = File.Create(args[ 1 ] + theEntry.Name);

int size = 2048 ;
byte []data = new byte [ 2048 ];
while ( true )
... {
size
= s.Read(data, 0 ,data.Length);
if (size > 0 )
... {
streamWriter.Write(data,
0 ,size);
}

else
... {
break ;
}

}


streamWriter.Close();
}

}

s.Close();
}

}

}


有了压缩和解压缩的类以后,就要在窗体里调用了。怎么?是新手,不会调用?Ok,接着往下看如何在窗体里调用。

首先在窗体里放置两个命令按钮(不要告诉我你不会放啊~),然后编写以下源码

/// <summary>
/// 调用源码
/// </summary>

private void button2_Click_1(object sender, System.EventArgs e)
{
string []FileProperties=new string[2];
FileProperties[0]="C:/unzipped/";//待压缩文件目录
FileProperties[1]="C:/zip/a.zip"; //压缩后的目标文件
ZipClass Zc=new ZipClass();
Zc.ZipFileMain(FileProperties);
}

private void button2_Click(object sender, System.EventArgs e)
{
string []FileProperties=new string[2];
FileProperties[0]="C:/zip/test.zip";//待解压的文件
FileProperties[1]="C:/unzipped/";//解压后放置的目标目录
UnZipClass UnZc=new UnZipClass();
UnZc.UnZip(FileProperties);
}

好了,到此为止,如何压缩和解压缩的类都已经完成了


利用SharpZipLib进行文件的压缩和解压缩


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论