C#解压ZIP文件





using System;  
using System.Text;  
using System.Collections;  
using System.IO;  
using System.Diagnostics;  
using System.Runtime.Serialization.Formatters.Binary;  
using System.Data;  
  
using ICSharpCode.SharpZipLib.Zip;  
using ICSharpCode.SharpZipLib.Zip.Compression;  
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;   




namespace XML
{
    class UNZIP
    {




    ///  
    /// 功能:解压文件  
    /// creator chaodongwang 2009-11-11  
    ///
 




        ///  
        /// 功能:解压zip格式的文件。  
        ///
 
        /// 压缩文件路径  
        /// 解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹  
        /// 出错信息  
        /// 解压是否成功  
        public void UnZip(string zipFilePath, string unZipDir)  
        {  
          
            if (zipFilePath == string.Empty)  
            {  
                throw new Exception("压缩文件不能为空!");  
            }  
            if (!File.Exists(zipFilePath))  
            {  
                throw new System.IO.FileNotFoundException("压缩文件不存在!");  
            }




            //文件夹里建一个带有时间戳的文件夹
            unZipDir += "weather"+DateTime.Now.ToString("yyyyMMddHHmmsss");


    
            //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹  
            if (unZipDir == string.Empty)  
                unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));  


            if (!unZipDir.EndsWith("\\"))  
                unZipDir += "\\";
       
  


           if (!Directory.Exists(unZipDir))  
                Directory.CreateDirectory(unZipDir);


        
  
            using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))  
            {  
  
                ZipEntry theEntry;  
                while ((theEntry = s.GetNextEntry()) != null)  
                {  
                    string directoryName = Path.GetDirectoryName(theEntry.Name);  
                    string fileName = Path.GetFileName(theEntry.Name);  
                    if (directoryName.Length > 0)  
                    {  
                        Directory.CreateDirectory(unZipDir + directoryName);
                        //将解压后的文件放到带时间戳的文件夹里
                 
                       
                    }  
                    if (!directoryName.EndsWith("\\"))  
                        directoryName += "\\";  
                    if (fileName != String.Empty)  
                    {
                       
                        using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name))
                   
                        {  
  
                            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;  
                                }  
                            }  
                        }  
                    }  
                }  
            }  
        }  
    }   



        ///













你可能感兴趣的:(C#)