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;
///<summary>
///ZipFloClass的摘要说明
///</summary>
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;
///<summary>
///UnZipFloClass的摘要说明
///</summary>
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,可以测试一下,我是可以运行的。
分享到:
相关推荐
C#实现winform压缩解压文件夹
今天梳理一下项目中用到的压缩、解压文件夹或文件的方法,发现因为需求不同,已经用了好几个不同组件。今天就好好整理记录下,别下次遇到需求又重头开始了。 DotNetZip DotNetZip是一个开源的免费类库,主要提供了...
对文件夹下的所有子目录及所有文件进行压缩和解压,需在一起使用,有需要的可以下载下
C#winform写的压缩文件夹和解压文件夹,简洁方便,代码易懂
C#写的解压缩文件夹,同时保存文件夹的目录结构
c#压缩解压(可以压缩解压文件夹附有源妈) 该dll文件功能和WinRar软件一样,你只要在你的程序中引用dll文件,然后调用相应的函数就ok了。
也是在网上找的资源,但是网上现成的代码不是很好用,这里我做了些修改,具体代码见附件,很详细很简单的一个过程。这里只能压缩文件夹,压缩文件的代码自己看着写一写,应该不是很难。
在.Net Framework 2.0 中添加了System.IO.Compression 类来实现对文件/文件夹的压缩/解压(GZipStream方法),包括文档,代码,类文件
C#利用SharpZipLib解压或压缩文件夹实例操作-附件资源
C#实现zip压缩,解压zip文件源代码,附加有注释,代码清晰易懂!
该方法包含两种方案解压和压缩文件夹及文件 1.常用的压缩,工程中引用该文件,该文件为开源方法,引用后直接调用Business.cs的ZipFileMain方法即可压缩文件及文件夹。 2.调用系统API方法压缩,该文件为调用系统API的...
C#利用SharpZipLib进行文件压缩和解压实例
NULL 博文链接:https://steven-zhu.iteye.com/blog/619791
C# 压缩解压文件程序 完整的功能 vs2010 包含文件夹 和文件的压缩
基于C#的压缩与解压缩 源码 可以针对文件进行压缩与解压缩 可以针对目录下的进行压缩与解压缩
C#压缩、解压缩类 压缩 解压缩 递归压缩文件夹方法 压缩目录 压缩文件 压缩 解压
将文件压缩到当前文件下,文件解压到指定文件夹下,不包含原文件名,只保留元文件夹里的文件。
C# Zip 压缩和解压 NET 4.5 using System.IO.Compression;
C# 压缩解压缩,其中包含了通过递归的方式对文件夹进行压缩及解压缩操作