当前位置: 首页 > 编程日记 > 正文

Asp.net 2.0 C#实现压缩/解压功能

Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
(一). 实现功能
对文件及目录的压缩及解压功能
(二). 运行图片示例

(三).代码

1. 压缩类

  1/// <summary>
  2/// 压缩类
  3/// </summary>

  4public class ZipClass
  5{   
  6    public static void ZipFile(string FileToZip, string ZipedFile, int CompressionLevel, int BlockSize)
  7    {
  8        //如果文件没有找到,则报错
  9        if (!System.IO.File.Exists(FileToZip))
 10        {
 11            throw new System.IO.FileNotFoundException("指定要压缩的文件: " + FileToZip + " 不存在!");
 12        }

 13
 14        System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read);
 15        System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);
 16        ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
 17        ZipEntry ZipEntry = new ZipEntry("ZippedFile");
 18        ZipStream.PutNextEntry(ZipEntry);
 19        ZipStream.SetLevel(CompressionLevel);
 20        byte[] buffer = new byte[BlockSize];
 21        System.Int32 size = StreamToZip.Read(buffer, 0, buffer.Length);
 22        ZipStream.Write(buffer, 0, size);
 23        try
 24        {
 25            while (size < StreamToZip.Length)
 26            {
 27                int sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);
 28                ZipStream.Write(buffer, 0, sizeRead);
 29                size += sizeRead;
 30            }

 31        }

 32        catch (System.Exception ex)
 33        {
 34            throw ex;
 35        }

 36        ZipStream.Finish();
 37        ZipStream.Close();
 38        StreamToZip.Close();
 39    }

 40
 41    /// <summary>
 42    /// 压缩目录
 43    /// </summary>
 44    /// <param name="args">数组(数组[0]: 要压缩的目录; 数组[1]: 压缩的文件名)</param>

 45    public static void ZipFileDictory(string[] args)
 46    {
 47        string[] filenames = Directory.GetFiles(args[0]);
 48
 49        Crc32 crc = new Crc32();
 50        ZipOutputStream s = new ZipOutputStream(File.Create(args[1]));            
 51        s.SetLevel(6); 
 52        foreach (string file in filenames)
 53        {
 54            //打开压缩文件
 55            FileStream fs = File.OpenRead(file);
 56
 57            byte[] buffer = new byte[fs.Length];
 58            fs.Read(buffer, 0, buffer.Length);
 59            ZipEntry entry = new ZipEntry(file);
 60
 61            entry.DateTime = DateTime.Now;
 62            
 63            entry.Size = fs.Length;
 64            fs.Close();
 65
 66            crc.Reset();
 67            crc.Update(buffer);
 68
 69            entry.Crc = crc.Value;
 70
 71            s.PutNextEntry(entry);
 72
 73            s.Write(buffer, 0, buffer.Length);
 74
 75        }

 76
 77        s.Finish();
 78        s.Close();
 79    }

 80
 81    /// <summary>
 82    /// 压缩文件
 83    /// </summary>
 84    /// <param name="FileToZip">要进行压缩的文件名</param>
 85    /// <param name="ZipedFile">压缩后生成的压缩文件名</param>

 86    public static void ZipFile(string FileToZip, string ZipedFile)
 87    {
 88        //如果文件没有找到,则报错
 89        if (!File.Exists(FileToZip))
 90        {
 91            throw new System.IO.FileNotFoundException("指定要压缩的文件: " + FileToZip + " 不存在!");
 92        }
            
 93        FileStream fs = File.OpenRead(FileToZip);
 94        byte[] buffer = new byte[fs.Length];
 95        fs.Read(buffer, 0, buffer.Length);
 96        fs.Close();
 97
 98        FileStream ZipFile = File.Create(ZipedFile);
 99        ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
100        ZipEntry ZipEntry = new ZipEntry("ZippedFile");
101        ZipStream.PutNextEntry(ZipEntry);
102        ZipStream.SetLevel(6);
103        
104        ZipStream.Write(buffer, 0, buffer.Length);            
105        ZipStream.Finish();
106        ZipStream.Close();
107    }

108}

109
110/// <summary>
111///  解压类
112/// </summary>

113public class UnZipClass
114{
115    /// <summary>
116    /// 解压功能(解压压缩文件到指定目录)
117    /// </summary>
118    /// <param name="args">待解压的文件</param>
119    /// <param name="args">指定解压目标目录</param>

120    public static void UnZip(string[] args)
121    {
122        ZipInputStream s = new ZipInputStream(File.OpenRead(@args[0].Trim()));            
123        ZipEntry theEntry;
124        string directoryName = Path.GetDirectoryName(@args[1].Trim());
125        
126        if (!Directory.Exists(@args[1].Trim()))
127        {
128            Directory.CreateDirectory(directoryName);
129        }

130        while ((theEntry = s.GetNextEntry()) != null)
131        {
132            ;
133            string fileName = Path.GetFileName(theEntry.Name);
134
135            if (fileName != String.Empty)
136            {            
137                FileStream streamWriter = File.Create(@args[1].Trim() + fileName);
138
139                int size = 2048;
140                byte[] data = new byte[2048];
141                while (true)
142                {
143                    size = s.Read(data, 0, data.Length);
144                    if (size > 0)
145                    {
146                        streamWriter.Write(data, 0, size);
147                    }

148                    else
149                    {
150                        break;
151                    }

152                }

153
154                streamWriter.Close();
155            }

156        }

157        s.Close();
158    }

159

2. 前台页面代码

 1      <body>
 2    <form id="form1" runat="server">
 3    <div>
 4        &nbsp;<asp:Label ID="Label1" runat="server" BackColor="#C0C0FF" Font-Size="XX-Large"
 5            Height="44px" Text="压缩文件/文件夹示例" Width="366px"></asp:Label>
 6        <asp:Panel ID="Panel1" runat="server" Height="1px" Width="369px" BackColor="#FFFFC0">
 7            <table width="100%" height="100%">
 8                <tr>
 9                    <td style="width: 3px" valign="top">
10                        <asp:Label ID="lbDisplay" runat="server" Text="压缩目录(from/to):" Width="153px"></asp:Label><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
11            <br />
12            <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
13            &nbsp;<br />
14            <asp:Button ID="btZipDictory" runat="server" OnClick="btZipDictory_Click" Text="压缩目录" /><br />
15                    </td>
16                    <td style="width: 4px" valign="middle">
17                        <asp:Label ID="Label2" runat="server" Text="解压目录(from/to):" Width="154px"></asp:Label>
18                        <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
19                        <br />
20                        <asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
21                        &nbsp;<br />
22                        <asp:Button ID="btUnZipDictory" runat="server" Text="解压目录" OnClick="btUnZipDictory_Click" /><br />
23                    </td>              
24                </tr>
25                <tr>
26                    <td style="width: 3px; height: 150px" valign="top">
27                        <asp:Label ID="Label3" runat="server" Text="压缩文件(from/to):" Width="153px"></asp:Label>
28                        <asp:TextBox ID="TextBox5" runat="server"></asp:TextBox>
29                        <br />
30                        <asp:TextBox ID="TextBox6" runat="server"></asp:TextBox>
31                        &nbsp;<br />
32                        <asp:Button ID="btZipFile" runat="server" Text="压缩文件" OnClick="btZipFile_Click" /><br />
33                    </td>
34                    <td style="width: 4px; height: 150px" valign="top">
35                        <asp:Label ID="Label4" runat="server" Text="解压文件(from/to):" Width="154px"></asp:Label>
36                        <asp:TextBox ID="TextBox7" runat="server"></asp:TextBox>
37                        <br />
38                        <asp:TextBox ID="TextBox8" runat="server"></asp:TextBox>
39                        &nbsp;<br />
40                        <asp:Button ID="btUnZipFile" runat="server" Text="解压文件" OnClick="btUnZipFile_Click" /><br />
41                    </td>
42             
43                </tr>
44     
45            </table>
46            <asp:Label ID="lbMessage" runat="server" Width="368px"></asp:Label><br />
47            <br />
48        </asp:Panel>
49    
50    </div>
51    </form>
52</body>
53

3. 后台页面代码

 1public partial class _Default : System.Web.UI.Page 
 2{
 3    protected void Page_Load(object sender, EventArgs e)
 4    {
 5
 6    }

 7    protected void btZipDictory_Click(object sender, EventArgs e)
 8    {
 9        string[] FilePathS = new string[2];
10        FilePathS[0= TextBox1.Text.Trim();  //待压缩的文件目录
11        FilePathS[1= TextBox2.Text.Trim();  //生成的目标文件        
12        ZipClass.ZipFileDictory(FilePathS);
13    }

14    protected void btUnZipDictory_Click(object sender, EventArgs e)
15    {
16        string[] FilePathS = new string[2];
17        FilePathS[0= TextBox3.Text.Trim();  //待解压的文件
18        FilePathS[1= TextBox4.Text.Trim();  //解压目标存放目录
19        UnZipClass.UnZip(FilePathS);
20    }

21    protected void btZipFile_Click(object sender, EventArgs e)
22    {
23        string[] FilePathS = new string[2];
24        FilePathS[0= TextBox5.Text.Trim();  //待压缩的文件
25        FilePathS[1= TextBox6.Text.Trim();  //生成的压缩文件名
26        ZipClass.ZipFile(FilePathS[0], FilePathS[1]);
27
28    }

29    protected void btUnZipFile_Click(object sender, EventArgs e)
30    {
31        string[] FilePathS = new string[2];
32        FilePathS[0= TextBox7.Text.Trim();  //待解压的文件
33        FilePathS[1= TextBox8.Text.Trim();  //解压目标存放目录
34        UnZipClass.UnZip(FilePathS);
35    }

36}

37
(). 示例代码下载

     http://www.cnblogs.com/Files/ChengKing/ZIP.rar

 

相关文章:

图像处理工具包ImagXpress的多页TIFF编辑API的使用(1)

2019独角兽企业重金招聘Python工程师标准>>> 在ImagXpress中用用于处理TIFF文件的TIFF编辑API&#xff0c;但是怎么使用呢&#xff0c;下面来具体的看看 ImagXpress中的ImageX.DeletePage 方法一次可以删除一个页面&#xff0c;ImageX.DeletePages 方法允许开发人员…

用Matplotlib轻松复刻分析图,看看哪个城市买房最自由

作者 | 费弗里来源 | Python大数据分析简介前不久「贝壳研究院」基于其丰富的房地产相关数据资源&#xff0c;发布了「2020 新一线城市居住报告」&#xff1a;图1而在这个报告中有几张数据可视化作品还是比较可圈可点的&#xff0c;作为&#xff08;在模仿中精进数据可视化&…

Python 代码规范

前言 Python 学习之旅&#xff0c;先来看看 Python 的代码规范&#xff0c;让自己先有个意识&#xff0c;而且在往后的学习中慢慢养成习惯 目录 Python代码规范一、简明概述 1、编码 如无特殊情况, 文件一律使用 UTF-8 编码如无特殊情况, 文件头部必须加入#-*-coding:utf-8-*-标…

二级域名用asp.net 2.0的实现方案

本人所了解有两种方案&#xff0c;可能还有其的方式&#xff0c;希望大家多多讨论&#xff01; 基本思路&#xff1a;1. 域名支持泛解析&#xff0c;即是指&#xff1a;把A记录 *.域名.com 解析到服务器IP&#xff0c;服务器IIS中做绑定&#xff0c;绑定时主机头为空;2. 为了…

又一例“监视员工?”百度回应:和 996 无关,目前没有任何应用

整理 | 王晓曼图源 | 视觉中国出品 | 程序人生 &#xff08;ID&#xff1a;coder _life&#xff09;1月13日晚间&#xff0c;针对百度公开“员工工作状态预测”专利惹争议一事&#xff0c;百度在官方微博火速回应称&#xff0c;这是一个管理上的“人岗匹配”衡量方法&#xff0…

僵死进程和僵尸进程

一个进程在调用exit命令结束自己的生命的时候&#xff0c;其实它并没有真正的被销毁&#xff0c;而是留下一个称为僵尸进程&#xff08;Zombie&#xff09;的数据结构&#xff08;系统调用exit&#xff0c;它的作用是使进程退出&#xff0c;但也仅仅限于将一个正常的进程变成一…

AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203

[HNOI2010]BOUNCE 弹飞绵羊 思路&#xff1a; SBlct&#xff1b; 代码&#xff1a; #include <bits/stdc.h> using namespace std; #define maxn 200005 int n,m,f[maxn],ch[maxn][2],rev[maxn],ki[maxn],sta[maxn],top,lit,size[maxn]; inline void in(int &now) {c…

C#与RSS亲密接触

讲述动态生成RSS文件的方法。动态生成RSS文件也基本有两种方法&#xff0c;一种是用字符串累加的方法&#xff0c;另一种是使用xml文档生成的方法。字符串累加的方法也比较简单&#xff0c;我也就不多说了&#xff0c;这里着重说一下生成XmlDocument的方法&#xff0c;包括各种…

2020 ACM Fellows 名单出炉,13 名华人入选,7 名来自国内!

【编者按】一年一度的 ACM Fellow 名单现已新鲜出炉&#xff01;向来以严格审查闻名的ACM Fellows&#xff0c;今年居然共选择了 95 名科学家&#xff0c;其中还有 13 位华人&#xff0c;来看看都是哪些大佬吧&#xff01;整理 | 郑丽媛出品 | CSDN&#xff08;ID&#xff1a;C…

Mybatis调用Oracle的存储过程

如何使用Mybaits调用数据库中的存储过程&#xff0c;下面以Oracle数据库的为例&#xff1a;1&#xff0e;在数据库中创建以下的存储过程&#xff1a;2&#xff0e;编写SQL映射文件WxclDAO.xml&#xff1a;<select id"selectWxcl2" parameterType"java.util.M…

JavaScript - 数据类型和变量

计算机顾名思义就是可以做数学计算的机器&#xff0c;因此&#xff0c;计算机程序理所当然地可以处理各种数值。但是&#xff0c;计算机能处理的远不止数值&#xff0c;还可以处理文本、图形、音频、视频、网页等各种各样的数据&#xff0c;不同的数据&#xff0c;需要定义不同…

用Socket发邮件的代码(可以群发)

qunFa.aspx文件的代码&#xff1a; <%... Page language"c#" Codebehind"qunFa.aspx.cs" AutoEventWireup"false" Inherits"liuwei.hanmail.qunFa" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN&qu…

rcp(插件开发)插件B需要引用插件A中的jar包-如何处理依赖关系

如果插件B需要引用插件A中的jar 通常需要以下几步&#xff1a; 1.插件B要依赖插件A 2.在插件B的build path中添加插件A的jar包 3.插件A的runtime导出插件B中使用jar的package

微软Cortana全面升级神经网络语音,效果堪比真人发音

近日&#xff0c;微软在全球范围内对Cortana进行了神经网络语音全面升级&#xff0c;升级后的Cortana更加自然流畅&#xff0c;语音效果堪比真人发音。 以下是Cortana不同国家、不同语言升级前后语音效果对比&#xff1a; Cortana音频 此次升级利用了深度神经网络技术&#…

Spring《五》集合的注入方式

List、Set、Map、Properties 1、List <property name"msg"> <list> <value>gf</value> <value>gd</value> <value>HelloWorld</value> </list> </property> 2、Set <property name"msg"&g…

虚方法的调用是怎么实现的(单继承VS多继承)

我们知道通过一个指向之类的父类指针可以调用子类的虚方法&#xff0c;因为子类的方法会覆盖父类同样的方法&#xff0c;通过这个指针可以找到对象实例的地址&#xff0c;通过实例的地址可以找到指向对应方法表的指针&#xff0c;而通过这个方法的名字就可以确定这个方法在方法…

asp.net 2.0防止同一用户同时登陆

要防止同一用户同时登陆,首页应该记录在线用户的信息(这里与用户名为例),然后判断正在登陆的用户里面是否已存在&#xff0e;在这里使用一个cache存放已经登陆的用户名&#xff0e;但是还有一个问题就是要知道用户是什么时候离开系统的呢&#xff1f;这就要定期清除cache中的内…

Python+Dash快速web应用开发——基础概念篇

作者&#xff1a;费弗里来源&#xff1a;Python大数据分析❝本文示例代码与数据已上传至https://github.com/CNFeffery/DataScienceStudyNotes❞1 简介这是我的新系列教程「PythonDash快速web应用开发」的第一期&#xff0c;我们都清楚学习一个新工具需要一定的动力&#xff0c…

POJ 1273 Drainage Ditches

网络流。题意非常easy。给出单向边&#xff0c;容量。找最大流。注意重边要加起来。g[u][v].cc; 第一次写网络流。也是第一个网络流的题。看了两天&#xff0c;理解了之后就唰唰唰的写出来了。 大概可能是EK吧。ORZ都不知道用的啥算法。仅仅是感觉要这样写。由于重边还WA了。改…

利用GridView显示主细表并一次编辑明细表所有数据的例子

全部代码如下&#xff1a; ASPX&#xff1a; <% Page Language"C#"ValidateRequest"false"AutoEventWireup"true"EnableViewState"false"CodeFile"Default2.aspx.cs"Inherits"Default2"%><!DOCTYPE ht…

TensorFlow搭建垃圾分类系统大师(免费领源码)

人工智能是一个多学科交叉融合的领域&#xff0c;其包含机器学习、计算机视觉、自然语言处理等多个子领域&#xff0c;其中计算机视觉是应用最广泛的领域之一。大多数人熟悉的手机和相机中的人脸识别功能&#xff0c;就是人工智能子领域——计算机视觉的体现。计算机视觉中的图…

for的循环遍体

以下讲解for的变体形式&#xff0c;对于一般的for语句常规这里不再赘述关于for变体 主要是用来实现一些特殊需求&#xff1a;//注意不要使for成为死循环 for(int i0;i!5;1){//DOLOOP }1&#xff09;假如&#xff0c;我们需要对循环变量i在循环外部使用&#xff0c;并调用循环变…

切版网上线,启用qieban.cn

2019独角兽企业重金招聘Python工程师标准>>> 近期&#xff0c;切版网收购并启用了qieban.cn域名&#xff0c;输入域名可以看到非常抢眼的黄底黑色的网站。复制国外psd2html模式&#xff0c;主要提供html5/css3前端外包。 可见切版网对域名的保护是非常的重视。据查询…

Microsoft .NET Pet Shop 4 架构与技术分析

1&#xff0e;项目概述与架构分析微软刚推出了基于ASP.NET 2.0下的Pet Shop 4, 该版本有了一个全新的用户界面。是研究ASP.NET 2.0的好范例啊&#xff0c;大家都知道&#xff0c;一直以来&#xff0c;在.NET和Java之间争论不休&#xff0c;到底使用哪个平台开发的企业级应用性能…

一学就会的 Python 时间转化总结(超全)

作者 | Peter来源 | Python编程时光在生活和工作中&#xff0c;我们每个人每天都在和时间打交道&#xff1a;早上什么时候起床&#xff1f;地铁几分钟来一趟&#xff1f;中午什么时候开始午休&#xff1f;明天是星期几&#xff1f;距离上次买衣服已经2个月呢&#xff1f;领导让…

ny20 吝啬的国度

吝啬的国度 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;3描述在一个吝啬的国度里有N个城市&#xff0c;这N个城市间只有N-1条路把这个N个城市连接起来。现在&#xff0c;Tom在第S号城市&#xff0c;他有张该国地图&#xff0c;他想知道如果…

Linux常见命令(二)

随着Linux应用的扩展许多同学开始接触Linux&#xff0c;根据学习Windwos的经验往往有一些茫然的感觉&#xff1a;不知从何处开始学起。虽然Linux桌面应用发展很快&#xff0c;但是命令在Linux中依然有很强的生命力。Linux是一个命令行组成的操作系统,精髓在命令行&#xff0c;无…

谷歌编程语言年度榜NO.1:知识体系总结(2021版)

本文专注整理一些有关Python学习的知识体系。整理的Python知识体系主要包括基础知识&#xff0c;Python热门的应用方向&#xff0c;推荐书籍&#xff0c;FAQ以及一些常见面试题目&#xff0c;包含了作为一个Python全栈工程师以及数据分析工程师在开发工作和学习中需要用到或者可…

看看大网站到底是如何保障网络安全的

首先&#xff0c;服务器上用的是私有的操作系统和数据库&#xff0c;所谓私有&#xff0c;并不是完全自己写&#xff0c;而是说&#xff0c;全部都是进行私有化改造过的&#xff0c;一般使用开源的操作系统和数据库进行改造&#xff0c;比如说操作系统使用free bsd的改&#xf…

php 魔术方法 说明

1、__get、__set这两个方法是为在类和他们的父类中没有声明的属性而设计的。◆__get( $property ) 当调用一个未定义的属性时&#xff0c;此方法会被触发&#xff0c;传递的参数是被访问的属性名。◆__set( $property, $value ) 给一个未定义的属性赋值时&#xff0c;此方法会被…