C#解压或压缩文件夹

简介: 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。

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,可以测试一下,我是可以运行的。

目录
相关文章
|
1月前
|
算法 Linux
Linux指令|压缩文件|zip|tar
Linux指令|压缩文件|zip|tar
|
3月前
|
数据安全/隐私保护 Python
Pyzipper解压文件和压缩文件夹方法
Pyzipper解压文件和压缩文件夹方法
48 1
|
5月前
|
算法 编译器 API
C++ MiniZip实现目录压缩与解压
Zlib是一个开源的数据压缩库,提供了一种通用的数据压缩和解压缩算法。它最初由`Jean-Loup Gailly`和`Mark Adler`开发,旨在成为一个高效、轻量级的压缩库,其被广泛应用于许多领域,包括网络通信、文件压缩、数据库系统等。其压缩算法是基于`DEFLATE`算法,这是一种无损数据压缩算法,通常能够提供相当高的压缩比。在Zlib项目中的`contrib`目录下有一个`minizip`子项目,minizip实际上不是`zlib`库的一部分,而是一个独立的开源库,用于处理ZIP压缩文件格式。它提供了对ZIP文件的创建和解压的简单接口。minizip在很多情况下与`zlib`一起使用
158 0
C++ MiniZip实现目录压缩与解压
|
Linux
解压 .solitairetheme8 文件
解压 .solitairetheme8 文件
76 0
|
Java
不解压修改压缩文件内容
在java中,可以不解压压缩包就修改压缩包中文件的内容。
348 0
不解压修改压缩文件内容
|
程序员 C#
C# 压缩文件
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来。    十年河东十年河西,莫欺少年穷。     学无止境,精益求精    上一节讲述了C# WebApi传参之Post请求-AJAX    本节探讨C#压缩文件的方法,直接上代码    如下 pub...
1211 0