您当前的位置: 首页 >  c#

C#解压或压缩文件夹

发布时间:2013-02-23 16:27:00 ,浏览量:0

C#解压或压缩文件夹

最近要做一个项目涉及到C#中压缩与解压缩的问题的解决方法,大家分享。 这里主要解决文件夹包含文件夹的解压缩问题。 1)下载SharpZipLib.dll,在http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx中有最新免费版本,“Assembliesfor.NET1.1,.NET2.0,.NETCF1.0,.NETCF2.0:Download[297KB]”点击Download可以下载,解压后里边有好多文件夹,因为不同的版本,我用的FW2.0。 2)引用SharpZipLib.dll,在项目中点击项目右键-->添加引用-->浏览,找到要添加的DLL-->确认 3)改写了文件压缩和解压缩的两个类,新建两个类名字为ZipFloClass.cs,UnZipFloClass.cs 源码如下 usingSystem; usingSystem.Data; usingSystem.Configuration; usingSystem.Web; usingSystem.Web.Security; usingSystem.Web.UI; usingSystem.IO; usingICSharpCode.SharpZipLib.Checksums; usingICSharpCode.SharpZipLib.Zip; usingICSharpCode.SharpZipLib.GZip; /// ///ZipFloClass的摘要说明 /// publicclassZipFloClass { publicvoidZipFile(stringstrFile,stringstrZip) { if(strFile[strFile.Length-1]!=Path.DirectorySeparatorChar) strFile+=Path.DirectorySeparatorChar; ZipOutputStreams=newZipOutputStream(File.Create(strZip)); s.SetLevel(6);//0-storeonlyto9-meansbestcompression zip(strFile,s,strFile); s.Finish(); s.Close(); } privatevoidzip(stringstrFile,ZipOutputStreams,stringstaticFile) { if(strFile[strFile.Length-1]!=Path.DirectorySeparatorChar)strFile+=Path.DirectorySeparatorChar; Crc32crc=newCrc32(); string[]filenames=Directory.GetFileSystemEntries(strFile); foreach(stringfileinfilenames) { if(Directory.Exists(file)) { zip(file,s,staticFile); } else//否则直接压缩文件 { //打开压缩文件 FileStreamfs=File.OpenRead(file); byte[]buffer=newbyte[fs.Length]; fs.Read(buffer,0,buffer.Length); stringtempfile=file.Substring(staticFile.LastIndexOf("\\")+1); ZipEntryentry=newZipEntry(tempfile); entry.DateTime=DateTime.Now; entry.Size=fs.Length; fs.Close(); crc.Reset(); crc.Update(buffer); entry.Crc=crc.Value; s.PutNextEntry(entry); s.Write(buffer,0,buffer.Length); } } } } 、、、、、、、、、、、、、、、 usingSystem; usingSystem.Data; usingSystem.Web; usingSystem.Text; usingSystem.Collections; usingSystem.IO; usingSystem.Diagnostics; usingSystem.Runtime.Serialization.Formatters.Binary; usingICSharpCode.SharpZipLib.BZip2; usingICSharpCode.SharpZipLib.Zip; usingICSharpCode.SharpZipLib.Zip.Compression; usingICSharpCode.SharpZipLib.Zip.Compression.Streams; usingICSharpCode.SharpZipLib.GZip; usingICSharpCode.SharpZipLib.Checksums; /// ///UnZipFloClass的摘要说明 /// publicclassUnZipFloClass { publicstringunZipFile(stringTargetFile,stringfileDir) { stringrootFile=""; try { //读取压缩文件(zip文件),准备解压缩 ZipInputStreams=newZipInputStream(File.OpenRead(TargetFile.Trim())); ZipEntrytheEntry; stringpath=fileDir; //解压出来的文件保存的路径 stringrootDir=""; //根目录下的第一个子文件夹的名称 while((theEntry=s.GetNextEntry())!=null) { rootDir=Path.GetDirectoryName(theEntry.Name); //得到根目录下的第一级子文件夹的名称 if(rootDir.IndexOf("\\")>=0) { rootDir=rootDir.Substring(0,rootDir.IndexOf("\\")+1); } stringdir=Path.GetDirectoryName(theEntry.Name); //根目录下的第一级子文件夹的下的文件夹的名称 stringfileName=Path.GetFileName(theEntry.Name); //根目录下的文件名称 if(dir!="") //创建根目录下的子文件夹,不限制级别 { if(!Directory.Exists(fileDir+"\\"+dir)) { path=fileDir+"\\"+dir; //在指定的路径创建文件夹 Directory.CreateDirectory(path); } } elseif(dir==""&&fileName!="") //根目录下的文件 { path=fileDir; rootFile=fileName; } elseif(dir!=""&&fileName!="") //根目录下的第一级子文件夹下的文件 { if(dir.IndexOf("\\")>0) //指定文件保存的路径 { path=fileDir+"\\"+dir; } } if(dir==rootDir) //判断是不是需要保存在根目录下的文件 { path=fileDir+"\\"+rootDir; } //以下为解压缩zip文件的基本步骤 //基本思路就是遍历压缩文件里的所有文件,创建一个相同的文件。 if(fileName!=String.Empty) { FileStreamstreamWriter=File.Create(path+"\\"+fileName); 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; } } streamWriter.Close(); } } s.Close(); returnrootFile; } catch(Exceptionex) { return"1;"+ex.Message; } } } 4)引用,新建一个页面,添加两个按钮,为按钮添加Click事件 源码如下 protectedvoidButton1_Click(objectsender,EventArgse) { string[]FileProperties=newstring[2]; FileProperties[0]="D:\\unzipped\\";//待压缩文件目录 FileProperties[1]="D:\\zip\\a.zip";//压缩后的目标文件 ZipFloClassZc=newZipFloClass(); Zc.ZipFile(FileProperties[0],FileProperties[1]); } protectedvoidButton2_Click(objectsender,EventArgse) { string[]FileProperties=newstring[2]; FileProperties[0]="D:\\zip\\b.zip";//待解压的文件 FileProperties[1]="D:\\unzipped\\";//解压后放置的目标目录 UnZipFloClassUnZc=newUnZipFloClass(); UnZc.unZipFile(FileProperties[0],FileProperties[1]); } 5)一切OK,可以测试一下,我是可以运行的。

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    109889博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.4494s