.Net压缩解压之DotNetZip

.Net项目中常用到压缩解压是最常见不过的,虽然在N<wbr>E<wbr>T<wbr><wbr>F<wbr>r<wbr>a<wbr>m<wbr>e<wbr>w<wbr>o<wbr>r<wbr>k<wbr><wbr>2<wbr>.<wbr>0<wbr><wbr>中<wbr>新<wbr>增<wbr>的<wbr>两<wbr>个<wbr>压<wbr>缩<wbr>类,但对于初次使用和项目的紧急性我们没有必要自己在写压缩和解压类。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

今天笔者在codeplex发现DotNetZip(http://dotnetzip.codeplex.com/),它是一个Zip操作类库,非常小,但也非常容易上手和使用,简短精悍的几行代码便可实现我们的需求。

例如:

//注意设置编码,默认中文件名会乱码
using (ZipFile zip = new ZipFile(@"E:\test.zip", System.Text.Encoding.Default))
{

//添加要压缩的文件夹
zip.AddDirectory(@"E:\test");
//还可以再追加单个文件
zip.AddFile(@"E:\test.doc");

//当添加文件夹或文件不存在抛错FileNotFoundException
zip.Save();
}

将要压缩文件以文件流的方式输出给客户端,不在服务端保留压缩包

using (ZipFile zip = new ZipFile())
{
//设置压缩密码,经测试设要设置置密码必须第一步设置,再添加文件或者文件夹后设置无效
zip.Password = "MyTest";
//要压缩的文件夹
zip.AddDirectory(Request.PhysicalApplicationPath);
//还可以再追加多个要压缩的文件夹或文件
//zip.AddFile(@"c:\1.txt");
//zip.AddDirectory(@"d:\MyProject\");
MemoryStream ms = new MemoryStream();
zip.Save(ms);

Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.zip", DateTime.Now.ToString("yyyyMMddhhmmss")));
Response.BinaryWrite(ms.ToArray());
ms.Close();
ms.Dispose();
}

列出zip文件中所有的文件

using (ZipFile zip = ZipFile.Read(@"E:\test.zip", System.Text.Encoding.Default))
{
string list = string.Empty;
//遍历压缩包
foreach (ZipEntry entry in zip)
{
//叠加文件名
list += string.Format("{0}<br/>", entry.FileName);
}
Response.Write(list);
}

删除zip中一个文件,注意无法直接删除一个文件夹
using (ZipFile zip = ZipFile.Read(@"E:\Mytest.zip", System.Text.Encoding.Default))
{
zip.RemoveEntry("2010年全国高考语文答案.doc");
zip.Save();
}

zip中解压某文件
using (ZipFile zip = ZipFile.Read(@"E:\test.zip", System.Text.Encoding.Default))
{
//将test压缩包中的2011090810192322.doc文件解压在E盘下
zip["2011090810192322.doc"].Extract(@"E:\", true);
}

解压zip中全部文件
using (ZipFile zip = ZipFile.Read(@"E:\Mytest.zip", System.Text.Encoding.Default))
{
//遍历压缩包中的每个文件
foreach (ZipEntry entry in zip)
{
entry.Extract(@"E:\new", true);
}
}

感谢大家的阅读,欢迎指出、更正本文的不足之处,也同时感谢大家和我一起讨论和学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值