1.建立工程,添加引用,添加SharpZipLib.dll
2.建立压缩和解压类CompressionFile.cs
添加如下代码
 using System;
using System; using System.IO;
using System.IO; using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.GZip; using ICSharpCode.SharpZipLib.BZip2;
using ICSharpCode.SharpZipLib.BZip2; using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Checksums; using ICSharpCode.SharpZipLib.Zip.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression; using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 namespace WebApplication3
namespace WebApplication3

 {
{
 ZipClass 压缩文件#region ZipClass 压缩文件
    ZipClass 压缩文件#region ZipClass 压缩文件 public class ZipClass
    public class ZipClass
 
     {
{ public void ZipFile(string FileToZip, string ZipedFile ,int CompressionLevel, int BlockSize,string password)
        public void ZipFile(string FileToZip, string ZipedFile ,int CompressionLevel, int BlockSize,string password)
 
         {
{ //如果文件没有找到,则报错
            //如果文件没有找到,则报错 if (! System.IO.File.Exists(FileToZip))
            if (! System.IO.File.Exists(FileToZip)) 
 
             {
{ throw new System.IO.FileNotFoundException("The specified file " + FileToZip + " could not be found. Zipping aborderd");
                throw new System.IO.FileNotFoundException("The specified file " + FileToZip + " could not be found. Zipping aborderd"); }
            } 
   System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip,System.IO.FileMode.Open , System.IO.FileAccess.Read);
            System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip,System.IO.FileMode.Open , System.IO.FileAccess.Read); System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);
            System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile); ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
            ZipOutputStream ZipStream = new ZipOutputStream(ZipFile); ZipEntry ZipEntry = new ZipEntry("ZippedFile");
            ZipEntry ZipEntry = new ZipEntry("ZippedFile"); ZipStream.PutNextEntry(ZipEntry);
            ZipStream.PutNextEntry(ZipEntry); ZipStream.SetLevel(CompressionLevel);
            ZipStream.SetLevel(CompressionLevel); byte[] buffer = new byte[BlockSize];
            byte[] buffer = new byte[BlockSize]; System.Int32 size =StreamToZip.Read(buffer,0,buffer.Length);
            System.Int32 size =StreamToZip.Read(buffer,0,buffer.Length); ZipStream.Write(buffer,0,size);
            ZipStream.Write(buffer,0,size); try
            try 
 
             {
{ while (size < StreamToZip.Length)
                while (size < StreamToZip.Length) 
 
                 {
{ int sizeRead =StreamToZip.Read(buffer,0,buffer.Length);
                    int sizeRead =StreamToZip.Read(buffer,0,buffer.Length); ZipStream.Write(buffer,0,sizeRead);
                    ZipStream.Write(buffer,0,sizeRead); size += sizeRead;
                    size += sizeRead; }
                } }
            }  catch(System.Exception ex)
            catch(System.Exception ex)
 
             {
{ throw ex;
                throw ex; }
            } ZipStream.Finish();
            ZipStream.Finish(); ZipStream.Close();
            ZipStream.Close(); StreamToZip.Close();
            StreamToZip.Close(); }
        } 
  public void ZipFileMain(string[] args)
        public void ZipFileMain(string[] args)
 
         {
{ //string[] filenames = Directory.GetFiles(args[0]);
            //string[] filenames = Directory.GetFiles(args[0]);
 string[] filenames = new string[]
            string[] filenames = new string[] {args[0]};
{args[0]}; 
   Crc32 crc = new Crc32();
            Crc32 crc = new Crc32(); ZipOutputStream s = new ZipOutputStream(File.Create(args[1]));
            ZipOutputStream s = new ZipOutputStream(File.Create(args[1])); 
   s.SetLevel(6); // 0 - store only to 9 - means best compression
            s.SetLevel(6); // 0 - store only to 9 - means best compression 
   foreach (string file in filenames)
            foreach (string file in filenames) 
 
             {
{ //打开压缩文件
                //打开压缩文件 FileStream fs = File.OpenRead(file);
                FileStream fs = File.OpenRead(file); 
    byte[] buffer = new byte[fs.Length];
                byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length);
                fs.Read(buffer, 0, buffer.Length); ZipEntry entry = new ZipEntry(file);
                ZipEntry entry = new ZipEntry(file); 
    entry.DateTime = DateTime.Now;
                entry.DateTime = DateTime.Now; 
    // set Size and the crc, because the information
                // set Size and the crc, because the information // about the size and crc should be stored in the header
                // about the size and crc should be stored in the header // if it is not set it is automatically written in the footer.
                // if it is not set it is automatically written in the footer. // (in this case size == crc == -1 in the header)
                // (in this case size == crc == -1 in the header) // Some ZIP programs have problems with zip files that don't store
                // Some ZIP programs have problems with zip files that don't store // the size and crc in the header.
                // the size and crc in the header. entry.Size = fs.Length;
                entry.Size = fs.Length; fs.Close();
                fs.Close(); 
    crc.Reset();
                crc.Reset(); crc.Update(buffer);
                crc.Update(buffer); 
    entry.Crc  = crc.Value;
                entry.Crc  = crc.Value; 
    s.PutNextEntry(entry);
                s.PutNextEntry(entry); 
    s.Write(buffer, 0, buffer.Length);
                s.Write(buffer, 0, buffer.Length); 
    }
            }   s.Finish();
            s.Finish(); s.Close();
            s.Close(); }
        } }
    } #endregion
    #endregion

 UnZipClass 解压文件#region UnZipClass 解压文件
    UnZipClass 解压文件#region UnZipClass 解压文件 public class UnZipClass
    public class UnZipClass
 
     {
{   
 /**//// <summary>
        /**//// <summary> /// 解压文件
        /// 解压文件 /// </summary>
        /// </summary> /// <param name="args">包含要解压的文件名和要解压到的目录名数组</param>
        /// <param name="args">包含要解压的文件名和要解压到的目录名数组</param> public void UnZip(string[] args)
        public void UnZip(string[] args)
 
         {
{ ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]));
            ZipInputStream s = new ZipInputStream(File.OpenRead(args[0])); try
            try
 
             {
{                 ZipEntry theEntry;
                ZipEntry theEntry; while ((theEntry = s.GetNextEntry()) != null)
                while ((theEntry = s.GetNextEntry()) != null) 
 
                 {
{    string directoryName = Path.GetDirectoryName(args[1]);
                    string directoryName = Path.GetDirectoryName(args[1]); string fileName      = Path.GetFileName(theEntry.Name);
                    string fileName      = Path.GetFileName(theEntry.Name); 
    //生成解压目录
                    //生成解压目录 Directory.CreateDirectory(directoryName);
                    Directory.CreateDirectory(directoryName); 
    if (fileName != String.Empty)
                    if (fileName != String.Empty) 
 
                     {
{    //解压文件到指定的目录
                        //解压文件到指定的目录 FileStream streamWriter = File.Create(args[1]+fileName);
                        FileStream streamWriter = File.Create(args[1]+fileName); 
     int size = 2048;
                        int size = 2048; byte[] data = new byte[2048];
                        byte[] data = new byte[2048]; while (true)
                        while (true) 
 
                         {
{ size = s.Read(data, 0, data.Length);
                            size = s.Read(data, 0, data.Length); if (size > 0)
                            if (size > 0) 
 
                             {
{ streamWriter.Write(data, 0, size);
                                streamWriter.Write(data, 0, size); }
                            }  else
                            else 
 
                             {
{ break;
                                break; }
                            } }
                        } 
     streamWriter.Close();
                        streamWriter.Close(); }
                    } }
                } s.Close();
                s.Close(); }
            } catch(Exception eu)
            catch(Exception eu)
 
             {
{ throw eu;
                throw eu; }
            } finally
            finally
 
             {
{ s.Close();
                s.Close(); }
            }
 }//end UnZip
        }//end UnZip

 }//end UnZipClass
    }//end UnZipClass #endregion
    #endregion

 AttachmentUnZip#region AttachmentUnZip
    AttachmentUnZip#region AttachmentUnZip public class AttachmentUnZip
    public class AttachmentUnZip
 
     {
{ public AttachmentUnZip()
        public AttachmentUnZip()
 
         {
{             }
        } public static void UpZip(string zipFile)
        public static void UpZip(string zipFile)
 
         {
{ string []FileProperties=new string[2];
            string []FileProperties=new string[2];
 FileProperties[0]=zipFile;//待解压的文件
            FileProperties[0]=zipFile;//待解压的文件
 FileProperties[1]=zipFile.Substring(0,zipFile.LastIndexOf("\\")+1);//解压后放置的目标目录
            FileProperties[1]=zipFile.Substring(0,zipFile.LastIndexOf("\\")+1);//解压后放置的目标目录
 UnZipClass UnZc=new UnZipClass();
            UnZipClass UnZc=new UnZipClass();
 UnZc.UnZip(FileProperties);
            UnZc.UnZip(FileProperties); }
        }
 }
    } #endregion
    #endregion }
}3.1html
 <HTML>
<HTML> <HEAD>
    <HEAD> <title>WebForm1</title>
        <title>WebForm1</title> <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"> <meta name="CODE_LANGUAGE" Content="C#">
        <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD>
    </HEAD> <body MS_POSITIONING="GridLayout">
    <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server">
        <form id="Form1" method="post" runat="server"> <asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 56px; POSITION: absolute; TOP: 64px" runat="server"
            <asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 56px; POSITION: absolute; TOP: 64px" runat="server" Text="压缩"></asp:Button>
                Text="压缩"></asp:Button> <asp:Button id="Button2" style="Z-INDEX: 102; LEFT: 112px; POSITION: absolute; TOP: 64px" runat="server"
            <asp:Button id="Button2" style="Z-INDEX: 102; LEFT: 112px; POSITION: absolute; TOP: 64px" runat="server" Text="解压"></asp:Button><INPUT id="File1" style="Z-INDEX: 103; LEFT: 32px; POSITION: absolute; TOP: 24px" type="file"
                Text="解压"></asp:Button><INPUT id="File1" style="Z-INDEX: 103; LEFT: 32px; POSITION: absolute; TOP: 24px" type="file" name="File1" runat="server">
                name="File1" runat="server"> </form>
        </form> </body>
    </body> </HTML>
</HTML> public class WebForm1 : System.Web.UI.Page
public class WebForm1 : System.Web.UI.Page
 
     {
{ protected System.Web.UI.WebControls.Button Button1;
        protected System.Web.UI.WebControls.Button Button1; protected System.Web.UI.HtmlControls.HtmlInputFile File1;
        protected System.Web.UI.HtmlControls.HtmlInputFile File1; protected System.Web.UI.WebControls.Button Button2;
        protected System.Web.UI.WebControls.Button Button2; 
     private void Page_Load(object sender, System.EventArgs e)
        private void Page_Load(object sender, System.EventArgs e)
 
         {
{ // Put user code to initialize the page here
            // Put user code to initialize the page here }
        }


 Web Form Designer generated code#region Web Form Designer generated code
        Web Form Designer generated code#region Web Form Designer generated code override protected void OnInit(EventArgs e)
        override protected void OnInit(EventArgs e)
 
         {
{ //
            // // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            // CODEGEN: This call is required by the ASP.NET Web Form Designer. //
            // InitializeComponent();
            InitializeComponent(); base.OnInit(e);
            base.OnInit(e); }
        } 
        
 /**//// <summary>
        /**//// <summary> /// Required method for Designer support - do not modify
        /// Required method for Designer support - do not modify /// the contents of this method with the code editor.
        /// the contents of this method with the code editor. /// </summary>
        /// </summary> private void InitializeComponent()
        private void InitializeComponent()
 
         {
{     this.Button1.Click += new System.EventHandler(this.Button1_Click);
            this.Button1.Click += new System.EventHandler(this.Button1_Click); this.Button2.Click += new System.EventHandler(this.Button2_Click);
            this.Button2.Click += new System.EventHandler(this.Button2_Click); this.Load += new System.EventHandler(this.Page_Load);
            this.Load += new System.EventHandler(this.Page_Load);
 }
        } #endregion
        #endregion

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

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