用SharpZipLib来压缩和解压文件 --zt

from:http://www.cnblogs.com/zhangweiguo3984/archive/2007/03/15/314333.html#675634
1.建立工程,添加引用,添加SharpZipLib.dll
2.建立压缩和解压类CompressionFile.cs
添加如下代码
None.gifusing System;
None.gif
using System.IO;
None.gif
using ICSharpCode.SharpZipLib.Zip;
None.gif
using ICSharpCode.SharpZipLib.GZip;
None.gif
using ICSharpCode.SharpZipLib.BZip2;
None.gif
using ICSharpCode.SharpZipLib.Checksums;
None.gif
using ICSharpCode.SharpZipLib.Zip.Compression;
None.gif
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
None.gif
None.gif
namespace WebApplication3
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
ContractedSubBlock.gifExpandedSubBlockStart.gif    
ZipClass 压缩文件#region ZipClass 压缩文件
InBlock.gif    
public class ZipClass
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
public void ZipFile(string FileToZip, string ZipedFile ,int CompressionLevel, int BlockSize,string password)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
//如果文件没有找到,则报错
InBlock.gif
            if (! System.IO.File.Exists(FileToZip)) 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
throw new System.IO.FileNotFoundException("The specified file " + FileToZip + " could not be found. Zipping aborderd");
ExpandedSubBlockEnd.gif            }

InBlock.gif  
InBlock.gif            System.IO.FileStream StreamToZip 
= new System.IO.FileStream(FileToZip,System.IO.FileMode.Open , System.IO.FileAccess.Read);
InBlock.gif            System.IO.FileStream ZipFile 
= System.IO.File.Create(ZipedFile);
InBlock.gif            ZipOutputStream ZipStream 
= new ZipOutputStream(ZipFile);
InBlock.gif            ZipEntry ZipEntry 
= new ZipEntry("ZippedFile");
InBlock.gif            ZipStream.PutNextEntry(ZipEntry);
InBlock.gif            ZipStream.SetLevel(CompressionLevel);
InBlock.gif            
byte[] buffer = new byte[BlockSize];
InBlock.gif            System.Int32 size 
=StreamToZip.Read(buffer,0,buffer.Length);
InBlock.gif            ZipStream.Write(buffer,
0,size);
InBlock.gif            
try 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
while (size < StreamToZip.Length) 
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
int sizeRead =StreamToZip.Read(buffer,0,buffer.Length);
InBlock.gif                    ZipStream.Write(buffer,
0,sizeRead);
InBlock.gif                    size 
+= sizeRead;
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }
 
InBlock.gif            
catch(System.Exception ex)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
throw ex;
ExpandedSubBlockEnd.gif            }

InBlock.gif            ZipStream.Finish();
InBlock.gif            ZipStream.Close();
InBlock.gif            StreamToZip.Close();
ExpandedSubBlockEnd.gif        }

InBlock.gif 
InBlock.gif        
public void ZipFileMain(string[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
//string[] filenames = Directory.GetFiles(args[0]);
ExpandedSubBlockStart.gifContractedSubBlock.gif
            string[] filenames = new string[]dot.gif{args[0]};
InBlock.gif  
InBlock.gif            Crc32 crc 
= new Crc32();
InBlock.gif            ZipOutputStream s 
= new ZipOutputStream(File.Create(args[1]));
InBlock.gif  
InBlock.gif            s.SetLevel(
6); // 0 - store only to 9 - means best compression
InBlock.gif
  
InBlock.gif            
foreach (string file in filenames) 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
//打开压缩文件
InBlock.gif
                FileStream fs = File.OpenRead(file);
InBlock.gif   
InBlock.gif                
byte[] buffer = new byte[fs.Length];
InBlock.gif                fs.Read(buffer, 
0, buffer.Length);
InBlock.gif                ZipEntry entry 
= new ZipEntry(file);
InBlock.gif   
InBlock.gif                entry.DateTime 
= DateTime.Now;
InBlock.gif   
InBlock.gif                
// set Size and the crc, because the information
InBlock.gif                
// about the size and crc should be stored in the header
InBlock.gif                
// if it is not set it is automatically written in the footer.
InBlock.gif                
// (in this case size == crc == -1 in the header)
InBlock.gif                
// Some ZIP programs have problems with zip files that don't store
InBlock.gif                
// the size and crc in the header.
InBlock.gif
                entry.Size = fs.Length;
InBlock.gif                fs.Close();
InBlock.gif   
InBlock.gif                crc.Reset();
InBlock.gif                crc.Update(buffer);
InBlock.gif   
InBlock.gif                entry.Crc  
= crc.Value;
InBlock.gif   
InBlock.gif                s.PutNextEntry(entry);
InBlock.gif   
InBlock.gif                s.Write(buffer, 
0, buffer.Length);
InBlock.gif   
ExpandedSubBlockEnd.gif            }
  
InBlock.gif            s.Finish();
InBlock.gif            s.Close();
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedSubBlockEnd.gif    
#endregion

InBlock.gif
ContractedSubBlock.gifExpandedSubBlockStart.gif    
UnZipClass 解压文件#region UnZipClass 解压文件
InBlock.gif    
public class UnZipClass
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{   
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 解压文件
InBlock.gif        
/// </summary>
ExpandedSubBlockEnd.gif        
/// <param name="args">包含要解压的文件名和要解压到的目录名数组</param>

InBlock.gif        public void UnZip(string[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            ZipInputStream s 
= new ZipInputStream(File.OpenRead(args[0]));
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{                
InBlock.gif                ZipEntry theEntry;
InBlock.gif                
while ((theEntry = s.GetNextEntry()) != null
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{   
InBlock.gif                    
string directoryName = Path.GetDirectoryName(args[1]);
InBlock.gif                    
string fileName      = Path.GetFileName(theEntry.Name);
InBlock.gif   
InBlock.gif                    
//生成解压目录
InBlock.gif
                    Directory.CreateDirectory(directoryName);
InBlock.gif   
InBlock.gif                    
if (fileName != String.Empty) 
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{   
InBlock.gif                        
//解压文件到指定的目录
InBlock.gif
                        FileStream streamWriter = File.Create(args[1]+fileName);
InBlock.gif    
InBlock.gif                        
int size = 2048;
InBlock.gif                        
byte[] data = new byte[2048];
InBlock.gif                        
while (true
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{
InBlock.gif                            size 
= s.Read(data, 0, data.Length);
InBlock.gif                            
if (size > 0
ExpandedSubBlockStart.gifContractedSubBlock.gif                            
dot.gif{
InBlock.gif                                streamWriter.Write(data, 
0, size);
ExpandedSubBlockEnd.gif                            }
 
InBlock.gif                            
else 
ExpandedSubBlockStart.gifContractedSubBlock.gif                            
dot.gif{
InBlock.gif                                
break;
ExpandedSubBlockEnd.gif                            }

ExpandedSubBlockEnd.gif                        }

InBlock.gif    
InBlock.gif                        streamWriter.Close();
ExpandedSubBlockEnd.gif                    }

ExpandedSubBlockEnd.gif                }

InBlock.gif                s.Close();
ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch(Exception eu)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
throw eu;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
finally
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                s.Close();
ExpandedSubBlockEnd.gif            }

InBlock.gif
ExpandedSubBlockEnd.gif        }
//end UnZip
InBlock.gif

InBlock.gif
ExpandedSubBlockEnd.gif    }
//end UnZipClass
ExpandedSubBlockEnd.gif
    #endregion

InBlock.gif
ContractedSubBlock.gifExpandedSubBlockStart.gif    
AttachmentUnZip#region AttachmentUnZip
InBlock.gif    
public class AttachmentUnZip
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
public AttachmentUnZip()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{            
ExpandedSubBlockEnd.gif        }

InBlock.gif        
public static void UpZip(string zipFile)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
string []FileProperties=new string[2];
InBlock.gif
InBlock.gif            FileProperties[
0]=zipFile;//待解压的文件
InBlock.gif

InBlock.gif            FileProperties[
1]=zipFile.Substring(0,zipFile.LastIndexOf("\\")+1);//解压后放置的目标目录
InBlock.gif

InBlock.gif            UnZipClass UnZc
=new UnZipClass();
InBlock.gif
InBlock.gif            UnZc.UnZip(FileProperties);
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockEnd.gif    }

ExpandedSubBlockEnd.gif    
#endregion

ExpandedBlockEnd.gif}
3.建立测试页面
3.1html
None.gif<HTML>
None.gif    
<HEAD>
None.gif        
<title>WebForm1</title>
None.gif        
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
None.gif        
<meta name="CODE_LANGUAGE" Content="C#">
None.gif        
<meta name="vs_defaultClientScript" content="JavaScript">
None.gif        
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
None.gif    
</HEAD>
None.gif    
<body MS_POSITIONING="GridLayout">
None.gif        
<form id="Form1" method="post" runat="server">
None.gif            
<asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 56px; POSITION: absolute; TOP: 64px" runat="server"
None.gif                Text
="压缩"></asp:Button>
None.gif            
<asp:Button id="Button2" style="Z-INDEX: 102; LEFT: 112px; POSITION: absolute; TOP: 64px" runat="server"
None.gif                Text
="解压"></asp:Button><INPUT id="File1" style="Z-INDEX: 103; LEFT: 32px; POSITION: absolute; TOP: 24px" type="file"
None.gif                name
="File1" runat="server">
None.gif        
</form>
None.gif    
</body>
None.gif
</HTML>
3.2 cs代码
None.gifpublic class WebForm1 : System.Web.UI.Page
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        
protected System.Web.UI.WebControls.Button Button1;
InBlock.gif        
protected System.Web.UI.HtmlControls.HtmlInputFile File1;
InBlock.gif        
protected System.Web.UI.WebControls.Button Button2;
InBlock.gif    
InBlock.gif        
private void Page_Load(object sender, System.EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
// Put user code to initialize the page here
ExpandedSubBlockEnd.gif
        }

InBlock.gif
InBlock.gif
ContractedSubBlock.gifExpandedSubBlockStart.gif        
Web Form Designer generated code#region Web Form Designer generated code
InBlock.gif        
override protected void OnInit(EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
//
InBlock.gif            
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
InBlock.gif            
//
InBlock.gif
            InitializeComponent();
InBlock.gif            
base.OnInit(e);
ExpandedSubBlockEnd.gif        }

InBlock.gif        
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// Required method for Designer support - do not modify
InBlock.gif        
/// the contents of this method with the code editor.
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        private void InitializeComponent()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{    
InBlock.gif            
this.Button1.Click += new System.EventHandler(this.Button1_Click);
InBlock.gif            
this.Button2.Click += new System.EventHandler(this.Button2_Click);
InBlock.gif            
this.Load += new System.EventHandler(this.Page_Load);
InBlock.gif
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif        
#endregion

InBlock.gif
ContractedSubBlock.gifExpandedSubBlockStart.gif        
压缩#region 压缩
InBlock.gif        
private void Button1_Click(object sender, System.EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
string []FileProperties=new string[2];            
InBlock.gif            
string fullName=this.File1.PostedFile.FileName;//C:\test\a.txt
InBlock.gif
            string destPath=System.IO.Path.GetDirectoryName(fullName);//C:\test
InBlock.gif            
//待压缩文件
InBlock.gif
            FileProperties[0]=fullName;
InBlock.gif
InBlock.gif            
//压缩后的目标文件
InBlock.gif
            FileProperties[1]= destPath +"\\"+ System.IO.Path.GetFileNameWithoutExtension(fullName)+".zip";
InBlock.gif            ZipClass Zc
=new ZipClass();
InBlock.gif            Zc.ZipFileMain(FileProperties);
InBlock.gif
InBlock.gif            
//删除压缩前的文件
InBlock.gif
            System.IO.File.Delete(fullName);
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockEnd.gif        
#endregion

InBlock.gif
ContractedSubBlock.gifExpandedSubBlockStart.gif        
解压#region 解压
InBlock.gif        
private void Button2_Click(object sender, System.EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
string fullName=this.File1.PostedFile.FileName;//C:\test\a.zip
InBlock.gif            
//解压文件
InBlock.gif
            AttachmentUnZip.UpZip(fullName);
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif        
#endregion

ExpandedBlockEnd.gif    }

转载于:https://www.cnblogs.com/Nina-piaoye/archive/2007/03/15/675739.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 给取data值_web前端教程分享Vue相关面试题

Vue是一套构建用户界面的渐进式框架&#xff0c;具有简单易用、性能好、前后端分离等优势&#xff0c;是web前端工程师工作的好帮手&#xff0c;也是企业选拔人才时考察的重点技能。接下来就给大家分享一些Vue相关的面试题&#xff0c;帮助大家提升竞争力。你对Vue生命周期的理…

.NET Core with 微服务 - Consul 配置中心

上一次我们介绍了Elastic APM组件。这一次我们继续介绍微服务相关组件配置中心的使用方法。本来打算介绍下携程开源的重型配置中心框架 apollo 但是体系实在是太过于庞大&#xff0c;还是让我爱不起来。因为前面我们已经介绍了使用Consul 做为服务注册发现的组件&#xff0c;那…

程序员最爱说的十句口头禅。。 | 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅1、别更新了学不动了。2、我不会修电脑&#xff0c;谢谢。3、听说今晚不用加班。4、是你的网络有问题。5、清一下缓存再试试6、扫码提需求&#xff0c;谢谢。7、换一台设备试试看。8、保证今晚十点上线。9、键盘给你&#xff0c;你来写…

.NET 6 新特性 System.Text.Json 中的 Writeable DOM

.NET 6 新特性 System.Text.Json 中的 Writeable DOM 特性Intro在 .NET 6 Preview 4 中&#xff0c;微软加入了 JSON Node 的支持&#xff0c;我们可以动态的编辑一个 JSON 文档&#xff0c;一个可以修改的 JSON 文档&#xff0c;就像 Newtonsoft.Json 里的 JToken&#xff0c;…

ArcGISServer10安装与地图发布

1.安装ArcGISServer10前先启动IIS&#xff0c;并打开IIS管理器界面&#xff0c;检查是否已经安装好。2.新建一个自己的站点打开Internet信息服务&#xff08;IIS&#xff09;管理器&#xff0c;右击左侧的网站列表&#xff0c;选择——添加网站&#xff0c;如下图所示&#xff…

电影特效用到什么计算机知识,后期影视特效处理知识普及

电影特效作为电影产业中不可或缺的元素之一&#xff0c;为电影的发展做出了巨大的贡献。今天小编主要给大家分享后期影视特效处理知识普及&#xff0c;希望对你们有帮助!影视特效改变电影制作的方式在目前的电影制作过程中&#xff0c;从分镜头剧本开始&#xff0c;特效的理念已…

通达信版弘历软件指标_通达信软件指标编写基础教程,10个指标源码祝你股市一帆风顺...

一、基本函数HHV&#xff08;X,N&#xff09; N日内X的最高价LLV&#xff08;X,N&#xff09; N日内X的最低价VOL 成交量AND 和&#xff0c;表示同时满足MA&#xff08;X,N&#xff09; 移动平均线&#xff0c;5日均线可以写作MA&#xff08;CLOSE&#xff0c;5&#xff09;&am…

魔方内部长啥样?三维动画展示其结构,谁发明的真是个天才

全世界只有3.14 % 的人关注了青少年数学之旅魔方&#xff0c;英文名为Rubiks Cube&#xff0c;又叫鲁比克方块&#xff0c;最早是由匈牙利布达佩斯建筑学院厄尔诺鲁比克&#xff08;又称作厄尔诺卢比克&#xff09;教授于1974年发明的。魔方竞速是一项手部极限运动。咱们平时看…

Hello Blazor:(2)集成Tailwind CSS续——nuget包方式

前段时间&#xff0c;写了一篇“Blazor如何集成Tailwind CSS”的文章。但是操作起来比较麻烦&#xff0c;又是命令行&#xff0c;又是要修改一大堆配置。后来&#xff0c;我又找到一个更简单的方法。实现方式新建Blazor项目&#xff0c;然后引用nuget包BamButz.MSBuild.Tailwin…

30屏幕参数_顶级屏幕加持,一加8系列核心配置、屏幕参数官方公布

昨天&#xff0c;一加8系列官宣将于4月16日进行线上发布。届时&#xff0c;全新的一加8系列将正式到来。随着官宣的开启&#xff0c;一加手机也开始了新机的预热。参数配置上&#xff0c;一加官方剧透称&#xff0c;一加8系列全系标配骁龙865 5G旗舰级移动平台&#xff0c;全系…

陕西科技大学18计算机调剂,2018年陕西科技大学考研调剂信息公布

2018考研复试交流群(进群领内部资料) 5764338402018年陕西科技大学考研调剂信息公布2018年考研成绩查询接近尾声&#xff0c;部分成绩不太理想的考生可能会考虑考研调剂&#xff0c;为了方便考生&#xff0c;中公考研小编为大家整理了2018年陕西科技大学考研调剂信息公布&#…

垃圾软件!动不动就扣费!| 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅一、二、三、四、五、&#xff08;图源网络&#xff0c;侵权删&#xff09;我怀疑有人偷窥我生活↓ ↓ ↓

WPF实现统计图(饼图仿LiveCharts)

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织欢迎转发、分享、点赞、在看&#xff0c;谢谢~。 01—效果预览效果预览&#xff08;更多效果请下载源码体验&#xff09;&#xff1a;一、PieControl.cs 代码如下 using System.Collections.Obje…

计算机实践教程采莲趣事,计算机基础作业采莲趣事

精品文档 . 忽然想起采莲的事情来了。采莲是江南的旧俗&#xff0c;似乎很早就有&#xff0c;而六朝时为盛&#xff1b;从诗歌里可以约略知道。采莲的是少年的女子&#xff0c;她们是荡着小船&#xff0c;唱着艳歌去的。采莲人不用说很多&#xff0c;还有看采莲的人。那是一个热…

那些曾经拥有的最大快乐,都是好奇心的结果

▲ 点击查看对于孩子们来说&#xff0c;强烈的好奇心和求知欲&#xff0c;是一种本能。在他们懵懵懂懂长大的过程中&#xff0c;总是对周围的世界充满着各种各样的疑问&#xff1a;“叶子为什么是绿色的&#xff1f;”“为什么花朵有那么多种颜色&#xff1f;”“蚂蚁为什么能…

[原]让链接点击过后无虚线

我以前还以为有难呢,在网上查资料,才知道这么简单, <a href"http://www.ktbbs.com"onfocus"this.blur()">转载于:https://www.cnblogs.com/Kennytian/archive/2007/03/31/695463.html

UML简易实践

2019独角兽企业重金招聘Python工程师标准>>> 面向对象的问题的处理的关键是建模问题。建模可以把在复杂世界的许多重要的细节给抽象出。许多建模工具封装了UML&#xff08;也就是Unified Modeling Language™&#xff09;&#xff0c;这篇课程的目的是展示出UML的精…

战斗机各种世界之最,涨知识了。。。

全世界只有3.14 % 的人关注了青少年数学之旅世界上最大的战斗机苏联的图-128是目前世界上起飞重量最大&#xff0c;体积最大的一款截击机&#xff0c;它由前苏联图波列夫设计局于1955研制成功并进行首飞&#xff0c;1963年装备部队&#xff0c;该机全长30.03米&#xff0c;翼展…

Bye Bye Embed-再见了Embed,符合web标准的媒体播放器代码

由于Embed标签是Netscape的私有财产&#xff0c;故一直未被W3C认可&#xff0c;对于各种媒体文件使用Embed标签是非标准的&#xff0c;如何改变&#xff1f;Elizabeth Castro的 Bye Bye Embed 一文对于各种媒体播放器给出了很好的符合web标准的代码。 在线媒体播放--Google Vid…

.NET Core授权失败如何自定义响应信息?

【导读】在.NET 5之前&#xff0c;当授权失败即403时无法很友好的自定义错误信息&#xff0c;以致于比如利用Vue获取到的是空响应&#xff0c;不能很好的处理实际业务&#xff0c;同时涉及到权限粒度控制到控制器、Action&#xff0c;也不能很好的获取对应路由信息本文我们来看…