您的位置:首页 > Web前端

用SharpZipLib来压缩和解压文件

2007-01-07 10:51 423 查看
1.建立工程,添加引用,添加SharpZipLib.dll
2.建立压缩和解压类CompressionFile.cs
添加如下代码


using System;


using System.IO;


using ICSharpCode.SharpZipLib.Zip;


using ICSharpCode.SharpZipLib.GZip;


using ICSharpCode.SharpZipLib.BZip2;


using ICSharpCode.SharpZipLib.Checksums;


using ICSharpCode.SharpZipLib.Zip.Compression;


using ICSharpCode.SharpZipLib.Zip.Compression.Streams;




namespace WebApplication3






{




    ZipClass 压缩文件#region ZipClass 压缩文件


    public class ZipClass




    

{


        public void ZipFile(string FileToZip, string ZipedFile ,int CompressionLevel, int BlockSize,string password)




        

{


            //如果文件没有找到,则报错


            if (! System.IO.File.Exists(FileToZip)) 




            

{


                throw new System.IO.FileNotFoundExcep
4000
tion("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 ZipFile = System.IO.File.Create(ZipedFile);


            ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);


            ZipEntry ZipEntry = new ZipEntry("ZippedFile");


            ZipStream.PutNextEntry(ZipEntry);


            ZipStream.SetLevel(CompressionLevel);


            byte[] buffer = new byte[BlockSize];


            System.Int32 size =StreamToZip.Read(buffer,0,buffer.Length);


            ZipStream.Write(buffer,0,size);


            try 




            

{


                while (size < StreamToZip.Length) 




                

{


                    int sizeRead =StreamToZip.Read(buffer,0,buffer.Length);


                    ZipStream.Write(buffer,0,sizeRead);


                    size += sizeRead;


                }


            } 


            catch(System.Exception ex)




            

{


                throw ex;


            }


            ZipStream.Finish();


            ZipStream.Close();


            StreamToZip.Close();


        }


 


        public void ZipFileMain(string[] args)




        

{


            //string[] filenames = Directory.GetFiles(args[0]);




            string[] filenames = new string[]

{args[0]};


  


            Crc32 crc = new Crc32();


            ZipOutputStream s = new ZipOutputStream(File.Create(args[1]));


  


            s.SetLevel(6); // 0 - store only to 9 - means best compression


  


            foreach (string file in filenames) 




            

{


                //打开压缩文件


                FileStream fs = File.OpenRead(file);


   


                byte[] buffer = new byte[fs.Length];


                fs.Read(buffer, 0, buffer.Length);


                ZipEntry entry = new ZipEntry(file);


   


                entry.DateTime = DateTime.Now;


   


                // set Size and the crc, because the information


                // about the size and crc should be stored in the header


                // if it is not set it is automatically written in the footer.


                // (in this case size == crc == -1 in the header)


                // Some ZIP programs have problems with zip files that don't store


                // the size and crc in the header.


                entry.Size = fs.Length;


                fs.Close();


   


                crc.Reset();


                crc.Update(buffer);


   


                entry.Crc  = crc.Value;


   


                s.PutNextEntry(entry);


   


                s.Write(buffer, 0, buffer.Length);


   


            }  


            s.Finish();


            s.Close();


        }


    }


    #endregion






    UnZipClass 解压文件#region UnZipClass 解压文件


    public class UnZipClass




    

{   




        /**//// <summary>


        /// 解压文件


        /// </summary>


        /// <param name="args">包含要解压的文件名和要解压到的目录名数组</param>


        public void UnZip(string[] args)




        

{


            ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]));


            try




            

{                


                ZipEntry theEntry;


                while ((theEntry = s.GetNextEntry()) != null) 




                

{   


                    string directoryName = Path.GetDirectoryName(args[1]);


                    string fileName      = Path.GetFileName(theEntry.Name);


   


                    //生成解压目录


                    Directory.CreateDirectory(directoryName);


   


                    if (fileName != String.Empty) 




                    

{   


                        //解压文件到指定的目录


                        FileStream streamWriter = File.Create(args[1]+fileName);


    


                        int size = 2048;


                        byte[] data = new byte[2048];


                        while (true) 




                        

{


                            size = s.Read(data, 0, data.Length);


                            if (size > 0) 




                            

{


                                streamWriter.Write(data, 0, size);


                            } 


                            else 




                            

{


                                break;


                            }


                        }


    


                        streamWriter.Close();


                    }


                }


                s.Close();


            }


            catch(Exception eu)




            

{


                throw eu;


            }


            finally




            

{


                s.Close();


            }




        }//end UnZip






    }//end UnZipClass


    #endregion






    AttachmentUnZip#region AttachmentUnZip


    public class AttachmentUnZip




    

{


        public AttachmentUnZip()




        

{            


        }


        public static void UpZip(string zipFile)




        

{


            string []FileProperties=new string[2];




            FileProperties[0]=zipFile;//待解压的文件




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




            UnZipClass UnZc=new UnZipClass();




            UnZc.UnZip(FileProperties);


        }




    }


    #endregion


}
3.建立测试页面
3.1html


<HTML>


    <HEAD>


        <title>WebForm1</title>


        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">


        <meta name="CODE_LANGUAGE" Content="C#">


        <meta name="vs_defaultClientScript" content="JavaScript">


        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">


    </HEAD>


    <body MS_POSITIONING="GridLayout">


        <form id="Form1" method="post" runat="server">


            <asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 56px; POSITION: absolute; TOP: 64px" runat="server"


                Text="压缩"></asp:Button>


            <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"


                name="File1" runat="server">


        </form>


    </body>


</HTML>
3.2 cs代码


public class WebForm1 : System.Web.UI.Page




    

{


        protected System.Web.UI.WebControls.Button Button1;


        protected System.Web.UI.HtmlControls.HtmlInputFile File1;


        protected System.Web.UI.WebControls.Button Button2;


    


        private void Page_Load(object sender, System.EventArgs e)




        

{


            // Put user code to initialize the page here


        }








        Web Form Designer generated code#region Web Form Designer generated code


        override protected void OnInit(EventArgs e)




        

{


            //


            // CODEGEN: This call is required by the ASP.NET Web Form Designer.


            //


            InitializeComponent();


            base.OnInit(e);


        }


        




        /**//// <summary>


        /// Required method for Designer support - do not modify


        /// the contents of this method with the code editor.


        /// </summary>


        private void InitializeComponent()




        

{    


            this.Button1.Click += new System.EventHandler(this.Button1_Click);


            this.Button2.Click += new System.EventHandler(this.Button2_Click);


            this.Load += new System.EventHandler(this.Page_Load);




        }


        #endregion






        压缩#region 压缩


        private void Button1_Click(object sender, System.EventArgs e)




        

{


            string []FileProperties=new string[2];            


            string fullName=this.File1.PostedFile.FileName;//C:/test/a.txt


            string destPath=System.IO.Path.GetDirectoryName(fullName);//C:/test


            //待压缩文件


            FileProperties[0]=fullName;




            //压缩后的目标文件


            FileProperties[1]= destPath +"//"+ System.IO.Path.GetFileNameWithoutExtension(fullName)+".zip";


            ZipClass Zc=new ZipClass();


            Zc.ZipFileMain(FileProperties);




            //删除压缩前的文件


            System.IO.File.Delete(fullName);


        }




        #endregion






        解压#region 解压


        private void Button2_Click(object sender, System.EventArgs e)




        

{


            string fullName=this.File1.PostedFile.FileName;//C:/test/a.zip


            //解压文件


            AttachmentUnZip.UpZip(fullName);


        }


        #endregion


    }
4.源代码下载/Files/singlepine/zipunzip.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息