asp.net文件压缩和解压缩的代码示例

发布时间:2019-10-12编辑:脚本学堂
本文介绍下,在asp.net中实现文件的压缩与解压缩的一段代码,有需要的朋友,不妨参考下。

.net进行压缩与解压缩的代码:
   

复制代码 代码示例:
using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Text; 
    using System.IO; 
    using System.Diagnostics; 
    using System.IO.Compression; 
     
    namespace WebDemo 
    { 
        public partial class FileCompAndDecomp : System.Web.UI.Page 
        { 
            protected void Page_Load(object sender, EventArgs e) 
            { 
                if (RequestType()) 
                { 
                    string Message = string.Empty; 
                    string HDCommand = Request["HDCommand"].ToString(); 
                    switch (HDCommand) 
                    { 
                        case "FileComp"://压缩 
                            Message = CompressFile(Server.MapPath("yangfeizai/Temp.doc"), Server.MapPath("yangfeizai/Test.rar")); 
                            break
                        case "FileDeComp"://解压 
                            Message = DecompressFile(Server.MapPath("yangfeizai/Test.rar"), Server.MapPath("yangfeizai/Result.doc")); 
                            break; 
                        default: 
                            break; 
                    } 
                    Response.Write("<script>alert('" + Message + "')</script>"); 
                } 
            } 
    
            #region //判断页面提交方式POST/GET 
            public bool RequestType() 
            { 
                if (HttpContext.Current.Request.RequestType == "POST") 
                    return true; 
                else 
                    return false; 
            } 
            #endregion 
    
            #region //文件压缩 
            public string CompressFile(string iFile, string oFile)   
            { 
                string message = string.Empty; 
                //判断文件是否存在       
                if (!File.Exists(iFile)) 
                    return "压缩文件未找到!"; 
                //创建文件流        
                byte[] buffer = null;    
                FileStream iStream = null;   
                FileStream oStream = null;    
                gzipStream cStream = null; 
                try 
                { 
                    //把文件写进数组      
                    iStream = new FileStream(iFile, FileMode.Open, FileAccess.Read, FileShare.None); 
                    buffer = new byte[iStream.Length]; 
                    int num = iStream.Read(buffer, 0, buffer.Length); 
                    if (num != buffer.Length) 
                        return "压缩文件出现异常!"; 
                    //创建文件输出流并输出     
                    oStream = new FileStream(oFile, FileMode.Create, FileAccess.Write,FileShare.None); 
                    cStream = new GZipStream(oStream, CompressionMode.Compress, true); 
                    cStream.Write(buffer, 0, buffer.Length); 
                    message = "压缩成功!"; 
                } 
                catch (ApplicationException ex) 
                { 
                    message=ex.Message; 
                }           
                finally         
                {                
                    //关闭流对象         
                    if (iStream != null) iStream.Close();      
                    if (cStream != null) cStream.Close();       
                    if (oStream != null) oStream.Close();    
                } 
                return message; 
            } 
            #endregion 
    
            #region //文件解压 
            public string DecompressFile(string iFile, string oFile)       
            { 
                string message = string.Empty; 
                //判断文件是否存在          
                if (!File.Exists(iFile)) 
                    return "解压文件为找到!";             
                //创建文件流            
                FileStream iStream = null;      
                FileStream oStream = null;         
                GZipStream dStream = null; 
                byte[] qBuffer = new byte[0x10000]; 
                try 
                {  //www.jb200.com
                    //把压缩文件写入数组        
                    iStream = new FileStream(iFile, FileMode.Open, FileAccess.Read, FileShare.None); 
                    dStream = new GZipStream(iStream, CompressionMode.Decompress, true); 
                    //创建输出流并输出     
                    oStream = new FileStream(oFile, FileMode.Create, FileAccess.Write, FileShare.None); 
                    int bytesRead = dStream.Read(qBuffer, 0, qBuffer.Length); 
                    while (bytesRead > 0) 
                    { 
                        oStream.Write(qBuffer, 0, bytesRead); 
                        bytesRead = dStream.Read(qBuffer, 0, qBuffer.Length); 
                    } 
                    oStream.Flush(); 
                    message = "解压成功!"; 
                } 
                catch (ApplicationException ex) 
                { 
                    message = ex.Message; 
                }           
                finally             
                {               
                    //关闭流对象         
                    if (iStream != null) iStream.Close();      
                    if (dStream != null) dStream.Close();     
                    if (oStream != null) oStream.Close();     
                } 
                return message; 
            } 
            #endregion 
        } 
    }