C#实现文件压缩与解压的方法示例【ZIP格式】
本文实例讲述了C#实现文件压缩与解压的方法。分享给大家供大家参考,具体如下:
在企业开发过程中经常会遇到文件的压缩与解压,虽然网上很多流行的压缩文件格式都是RAR的,但是由于RAR不是一个开放的标准,因此ZIP成了更多人的选择。如果你不想自己开发的话可以选择开源的项目,比如SharpZipLib就是一个不错的选择。
组件的使用比较简单,请参照下面的代码。点击下载项目源码。
/*
*GaryZhang--cbcye@live.com
*www.cbcye.com
*www.quicklearn.cn
*cbcye.cnblogs.com
*/
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.IO;
usingICSharpCode.SharpZipLib.Zip;
usingSystem.Diagnostics;
usingICSharpCode.SharpZipLib.Core;
namespaceTestConsole
{
classProgram
{
staticvoidMain()
{
//CreateZipFile(@"d:\",@"d:\a.zip");
UnZipFile(@"d:\a.zip");
Console.Read();
}
privatestaticvoidCreateZipFile(stringfilesPath,stringzipFilePath)
{
if(!Directory.Exists(filesPath))
{
Console.WriteLine("Cannotfinddirectory'{0}'",filesPath);
return;
}
try
{
string[]filenames=Directory.GetFiles(filesPath);
using(ZipOutputStreams=newZipOutputStream(File.Create(zipFilePath)))
{
s.SetLevel(9);//压缩级别0-9
//s.Password="123";//Zip压缩文件密码
byte[]buffer=newbyte[4096];//缓冲区大小
foreach(stringfileinfilenames)
{
ZipEntryentry=newZipEntry(Path.GetFileName(file));
entry.DateTime=DateTime.Now;
s.PutNextEntry(entry);
using(FileStreamfs=File.OpenRead(file))
{
intsourceBytes;
do
{
sourceBytes=fs.Read(buffer,0,buffer.Length);
s.Write(buffer,0,sourceBytes);
}while(sourceBytes>0);
}
}
s.Finish();
s.Close();
}
}
catch(Exceptionex)
{
Console.WriteLine("Exceptionduringprocessing{0}",ex);
}
}
privatestaticvoidUnZipFile(stringzipFilePath)
{
if(!File.Exists(zipFilePath))
{
Console.WriteLine("Cannotfindfile'{0}'",zipFilePath);
return;
}
using(ZipInputStreams=newZipInputStream(File.OpenRead(zipFilePath)))
{
ZipEntrytheEntry;
while((theEntry=s.GetNextEntry())!=null)
{
Console.WriteLine(theEntry.Name);
stringdirectoryName=Path.GetDirectoryName(theEntry.Name);
stringfileName=Path.GetFileName(theEntry.Name);
//createdirectory
if(directoryName.Length>0)
{
Directory.CreateDirectory(directoryName);
}
if(fileName!=String.Empty)
{
using(FileStreamstreamWriter=File.Create(theEntry.Name))
{
intsize=2048;
byte[]data=newbyte[2048];
while(true)
{
size=s.Read(data,0,data.Length);
if(size>0)
{
streamWriter.Write(data,0,size);
}
else
{
break;
}
}
}
}
}
}
}
}
}
更多关于C#相关内容感兴趣的读者可查看本站专题:《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》
希望本文所述对大家C#程序设计有所帮助。