C# 解压zip压缩文件

/// <summary>
       /// 功能:解压zip格式的文件。
       /// </summary>
       /// <param name="zipFilePath">压缩文件路径</param>
       /// <param name="unZipDir">解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹</param>
       /// <param name="err">出错信息</param>
       /// <returns>解压是否成功</returns>
       public bool UnZipFile(string zipFilePath, string unZipDir)// , out string err
       {
           // err = "";
           if (zipFilePath == string.Empty)
           {
               //err = "压缩文件不能为空!";
               return false;
           }
           if (!File.Exists(zipFilePath))
           {
               //err = "压缩文件不存在!";
               return false;
           }
           //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹
           if (unZipDir == string.Empty)
               unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
           if (!unZipDir.EndsWith("\\"))
               unZipDir += "\\";
           if (!Directory.Exists(unZipDir))
               Directory.CreateDirectory(unZipDir);
 
           try
           {
               using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath.ToLower())))
               {
 
                   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;
                                   }
                               }
                           }
                       }
                   }//while
               }
           }
           catch (Exception ex)
           {
               //err = ex.Message;
               return false;
           }
           return true;
       }//解压结束

 

posted @ 2013-11-01 20:10  Net-Spider  阅读(254)  评论(0)    收藏  举报