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#程序设计有所帮助。