• 用SharpZipLib来压缩和解压文件(转载)


    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
    {
        
    #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.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 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


        
    #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


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


            
    解压 解压
            
    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
  • 相关阅读:
    [Tomcat源码分析] Eclipse中搭建Apache Tomcat源码调试环境
    java基本数据类型
    JD-GUI反编译出现ERROR
    Convert.ToInt32()与int.Parse()的区别 (转载)
    C#编写记事本(高仿)
    少年三国志首页效果实现
    Linux系统下文件删除的恢复方法
    prefab 程序自动写回
    Unity3d UI与逻辑分离改造
    在windows上练习object-c
  • 原文地址:https://www.cnblogs.com/chenying99/p/1980191.html
Copyright © 2020-2023  润新知