ASP.NET在線壓縮與在線解壓縮

需要SharpZipLib引用,ASP.NET 在線壓縮與在線解壓縮源碼:

using System; 
using System.IO; 
using ICSharpCode.SharpZipLib.Checksums; 
using ICSharpCode.SharpZipLib.Zip; 
using ICSharpCode.SharpZipLib.Zip.Compression; 
using ICSharpCode.SharpZipLib.Zip.Compression.Streams; 

/// <summary> 
/// 2005-7-9 
/// 垃圾豬 
/// ewebapp.net 
/// </summary> 
namespace eWebapp.Upload 
{ 
    /// <summary> 
    /// 壓縮解壓處理。 
    /// </summary> 
    public class eZip 
    { 
        #region 私有域 
        private string zipname = string.Empty; 
        private string password = string.Empty; 
        private int level = 9; 
        private string unzipdir = string.Empty; 
        private Crc32 crc; 
        ZipOutputStream s; 
        #endregion 

        #region 屬性 

        /// <summary> 
        /// 壓縮文件名稱 
        /// </summary> 
        public string Zipname 
        { 
            set{ zipname = value;} 
        } 

        /// <summary> 
        /// 解壓文件夾 
        /// </summary> 
        public string Unzipdir 
        { 
            set { unzipdir = value;} 
        } 
        /// <summary> 
        /// 壓縮文件密碼 
        /// </summary> 
        public string Password 
        { 
            set {password = value;} 
        } 
        /// <summary> 
        /// 壓縮級別 
        /// </summary> 
        public int Level 
        { 
            set {level = value;} 
        } 

        public eZip() 
        { 
            // 
            // TODO: 在此處添加構造函數邏輯 
            // 
        } 

        #endregion 

        /// <summary> 
        /// 創建壓縮文件 
        /// </summary> 
        public void CreateZip() 
        { 
            crc = new Crc32(); 
            s = new ZipOutputStream(File.Create(this.zipname)); 
            s.SetLevel(level); 
            s.Password = password; 
        } 
        /// <summary> 
        /// 結束操作 
        /// </summary> 
        public void FinishZip() 
        { 
            s.Finish(); 
            s.Close(); 
        } 

        /// <summary> 
        /// 增加一個文件 
        /// </summary> 
        /// <param name="_crc"></param> 
        /// <param name="_s"></param> 
        /// <param name="_filename"></param> 
        /// <param name="_filesize"></param> 
        /// <param name="_buffer"></param> 
        private void addFile(Crc32 _crc,ZipOutputStream _s,string _filename,long _filesize,byte[] _buffer) 
        { 
            // 添加一個文件到壓縮文件中 
            ZipEntry entry = new ZipEntry(_filename); 
             
            entry.DateTime = DateTime.Now; 

            entry.Size = _filesize; 

             
            _crc.Reset(); 
            _crc.Update(_buffer); 
             
            entry.Crc  = _crc.Value; 
             
            _s.PutNextEntry(entry); 
             
            _s.Write(_buffer, 0, _buffer.Length); 

        } 

        /// <summary> 
        /// 添加一個文件到壓縮文件中 
        /// </summary> 
        /// <param name="_filename"></param> 
        public void AddFile(string _filename) 
        { 

            FileStream fs = File.OpenRead(_filename); 
            byte[] buffer = new byte[fs.Length]; 
            fs.Read(buffer, 0, buffer.Length); 
            string filename = System.IO.Path.GetFileName(_filename); 
            long m_fLength = fs.Length; 
            fs.Close(); 
            addFile(this.crc,this.s,filename,m_fLength,buffer); 
        } 

        /// <summary> 
        /// 新建文本文件 
        /// </summary> 
        /// <param name="_crc"></param> 
        /// <param name="_s"></param> 
        /// <param name="_filename"></param> 
        /// <param name="_text"></param> 
        private void addText(Crc32 _crc,ZipOutputStream _s,string _filename,string _text) 
        { 
            byte[] text = System.Text.Encoding.Default.GetBytes(_text); 
            addFile(_crc,_s,_filename,text.Length,text); 
        } 

        /// <summary> 
        /// 添加一個指定內容的文本文件到壓縮文件中 
        /// </summary> 
        /// <param name="_filename"></param> 
        /// <param name="_text"></param> 
        public void AddText(string _filename,string _text) 
        { 
            addText(this.crc,this.s,_filename,_text); 
        } 


        /// <summary> 
        /// 解壓處理 
        /// </summary> 
        public void Unzip() 
        { 
                     
            string unzipdirectoryroot = this.unzipdir; 
             
             
            // 調用組件中讀取壓縮文件的對象 
            ZipInputStream s = new ZipInputStream(File.OpenRead(this.zipname)); 
            s.Password = this.password; 

            ZipEntry theEntry; 
             

            while ((theEntry = s.GetNextEntry()) != null) 
            { 
                // 當前解壓到的目錄,Path.GetDirectoryName(theEntry.Name)爲提取壓縮文件目錄 
                string directoryName = Path.Combine(unzipdirectoryroot,Path.GetDirectoryName(theEntry.Name)); 
                // 當前正在解壓的文件 
                string fileName = Path.Combine(directoryName,Path.GetFileName(theEntry.Name)); 
                // 創建目錄 
                Directory.CreateDirectory(directoryName); 

                if (fileName != String.Empty)  
                { 
                    try 
                    { 
                        // 創建解壓文件 
                        FileStream streamWriter = File.Create(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(); 
                    } 
                    catch 
                    { 
                    } 
                     
                } 
            } 
            s.Close(); 
        } 

    } 
} 

轉載於:https://www.cnblogs.com/undefine/archive/2010/05/21/1741063.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章