| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410 | 
							- using System;
 
- using System.Collections;
 
- using System.Collections.Generic;
 
- using System.IO;
 
- using System.Threading;
 
- using ICSharpCode.SharpZipLib.Zip;
 
- using UnityEngine;
 
- public class UnZipThread
 
- {
 
-     public Thread thread;
 
-     private UnZipThreadPool unZipThreadPool;
 
-     private string unPath;
 
-    
 
-     private byte[] zipData = new byte[2048];
 
-     public bool isUnEnd;
 
-     private bool isUpdateEnd;
 
-     public void InitUnZip(UnZipThreadPool unZipThreadPool)
 
-     {
 
-         this.unZipThreadPool = unZipThreadPool;
 
-         unPath = unZipThreadPool.unPath;
 
-    
 
-         isUpdateEnd = true;
 
-         thread = new Thread(ThreadUpdate);
 
-         thread.Start();
 
-     }
 
-     private void ThreadUpdate()
 
-     {
 
-         while (isUpdateEnd)
 
-         {
 
-             try
 
-             {
 
-                 ZipEntry ze = null;
 
-                 Stream stream = null;
 
-                 lock (unZipThreadPool.allZipFile)
 
-                 {
 
-                     if (unZipThreadPool.allZipFile.Count > 0)
 
-                     {
 
-                         ze = unZipThreadPool.allZipFile[0];
 
-                         unZipThreadPool.allZipFile.Remove(ze);
 
-                         stream = unZipThreadPool.zipFile.GetInputStream(ze);
 
-                     }
 
-                 }
 
-                 if (ze == null)
 
-                 {
 
-                     Thread.Sleep(1000);
 
-                     return;
 
-                 }
 
-                 isUnEnd = false;
 
-                 UnzipFile(ze, stream, unPath);
 
-                
 
-             }
 
-             catch (Exception e)
 
-             {
 
-                 Debug.LogError("解压失败");
 
-             }
 
-             isUnEnd = true;
 
-             Thread.Sleep(10);
 
-         }
 
-     }
 
-     public void Cloas()
 
-     {
 
-         isUpdateEnd = false;
 
-         thread = null;
 
-     }
 
-     private void UnzipFile(ZipEntry zip, Stream stream, string dirPath)
 
-     {
 
-         FileStream fileStream = null;
 
-         try
 
-         {
 
-             //文件名不为空  
 
-             if (!string.IsNullOrEmpty(zip.Name))
 
-             {
 
-                 string filePath = dirPath;
 
-                 string[] files = zip.Name.Split('/');
 
-                 // if (files.Length < 2)
 
-                 // {
 
-                 //     return;
 
-                 // }
 
-                 filePath += "/" + files[files.Length - 1];
 
-                 //如果是一个新的文件路径 这里需要创建这个文件路径  
 
-                 if (IsDirectory(filePath))
 
-                 {
 
-                     Debug.Log("Create  file paht " + filePath);
 
-                     if (!Directory.Exists(filePath))
 
-                     {
 
-                         Directory.CreateDirectory(filePath);
 
-                     }
 
-                 }
 
-                 else
 
-                 {
 
-                     if (File.Exists(filePath))
 
-                     {
 
-                         File.Delete(filePath);
 
-                     }
 
-                     fileStream = File.Create(filePath);
 
-                     // Debug.Log(filePath);
 
-                     // MemoryStream ms = new MemoryStream();
 
-                     int size = 0;
 
-                     //每次读取2MB  直到把这个内容读完  
 
-                     while (true)
 
-                     {
 
-                         size = stream.Read(zipData, 0, zipData.Length);
 
-                         //小于0, 也就读完了当前的流  
 
-                         if (size > 0)
 
-                         {
 
-                             unZipThreadPool.currSize += size;
 
-                             fileStream.Write(zipData, 0, size);
 
-                         }
 
-                         else
 
-                         {
 
-                             break;
 
-                         }
 
-                     }
 
-                     fileStream.Flush();
 
-                     fileStream.Close();
 
-                     fileStream.Dispose();
 
-                     fileStream = null;
 
-                  
 
-                 }
 
-             }
 
-         }
 
-         catch (Exception e)
 
-         {
 
-             if (fileStream != null)
 
-             {
 
-                 fileStream.Close();
 
-                 fileStream.Dispose();
 
-             }
 
-             fileStream = null;
 
-             Debug.LogError("解压错误" + zip.Name);
 
-             Debug.Log(e);
 
-         }
 
-     }
 
-     /// <summary>  
 
-     /// 判断是否是目录文件  
 
-     /// </summary>  
 
-     /// <param name="path"></param>  
 
-     /// <returns></returns>  
 
-     private bool IsDirectory(string path)
 
-     {
 
-         if (path[path.Length - 1] == '/')
 
-         {
 
-             return true;
 
-         }
 
-         return false;
 
-     }
 
- }
 
- public class UnZipThreadPool
 
- {
 
-    
 
-     public string unPath;
 
-     public float jd
 
-     {
 
-         get { return currSize / maxSize; }
 
-     }
 
-     public float currSize;
 
-     public bool isEnd
 
-     {
 
-         get
 
-         {
 
-             bool isCount = false;
 
-             lock (allZipFile)
 
-             {
 
-                 if (allZipFile.Count <= 0)
 
-                 {
 
-                     isCount = true;
 
-                 }
 
-             }
 
-             if (isCount)
 
-             {
 
-                 for (int i = 0; i < _zipThreads.Count; i++)
 
-                 {
 
-                     if (!_zipThreads[i].isUnEnd)
 
-                     {
 
-                         return false;
 
-                     }
 
-                 }
 
-                 return true;
 
-             }
 
-             return false;
 
-         }
 
-     }
 
-     public float maxSize;
 
-   
 
-     public ZipFile zipFile;
 
-     public List<ZipEntry> allZipFile = new List<ZipEntry>();
 
-     private List<UnZipThread> _zipThreads = new List<UnZipThread>();
 
-     public int CurrCount()
 
-     {
 
-         lock (allZipFile)
 
-         {
 
-             return allZipFile.Count;
 
-         }
 
-     }
 
-     private FileStream fileStream;
 
-     public void InitUnZip(byte[] zipData, string unPath)
 
-     {
 
-    
 
-         this.unPath = unPath;
 
-         maxSize = zipData.Length;
 
-         MemoryStream ms = new MemoryStream(zipData);
 
-         zipFile = new ZipFile(ms);
 
-         IEnumerator ie = zipFile.GetEnumerator();
 
-         while (ie.MoveNext())
 
-         {
 
-             allZipFile.Add((ZipEntry) ie.Current);
 
-         }
 
-         for (int i = 0; i < 8; i++)
 
-         {
 
-             UnZipThread u = new UnZipThread();
 
-             u.InitUnZip(this);
 
-             _zipThreads.Add(u);
 
-         }
 
-     }
 
-     public void InitUnZip(string filePath, string unPath)
 
-     {
 
-       
 
-         if (!Directory.Exists(unPath))
 
-         {
 
-             Directory.CreateDirectory(unPath);
 
-         }
 
-         this.unPath = unPath;
 
-          fileStream = new FileStream(filePath, FileMode.Open);
 
-         zipFile = new ZipFile(fileStream);
 
-         IEnumerator ie = zipFile.GetEnumerator();
 
-         while (ie.MoveNext())
 
-         {
 
-             allZipFile.Add((ZipEntry) ie.Current);
 
-         }
 
-         maxSize = allZipFile.Count;
 
-         for (int i = 0; i < 4; i++)
 
-         {
 
-             UnZipThread u = new UnZipThread();
 
-             u.InitUnZip(this);
 
-             _zipThreads.Add(u);
 
-         }
 
-     }
 
-    
 
-     public void Cloas()
 
-     {
 
-         for (int i = 0; i < _zipThreads.Count; i++)
 
-         {
 
-             _zipThreads[i].Cloas();
 
-         }
 
-         if (fileStream != null)
 
-         {
 
-             fileStream.Close();
 
-             fileStream.Dispose();
 
-         }
 
-         allZipFile.Clear();
 
-         fileStream = null;
 
-     }
 
-     // public void UnzipWithPath()
 
-     // {
 
-     //     Debug.Log("dirpath is:" + unPath);
 
-     //     //ZipEntry:文件条目 就是该目录下所有的文件列表(也就是所有文件的路径)  
 
-     //     ZipEntry zip = null;
 
-     //     //输入的所有的文件流都是存储在这里面的  
 
-     //     ZipInputStream zipInStream = null;
 
-     //    
 
-     //     MemoryStream ms = new MemoryStream(zipData);
 
-     //
 
-     //     //读取文件流到zipInputStream  
 
-     //     zipInStream = new ZipInputStream(ms);
 
-     //
 
-     //     int topSize = zipData.Length;
 
-     //
 
-     //     int countCount = 0;
 
-     //
 
-     //     //循环读取Zip目录下的所有文件  
 
-     //     while ((zip = zipInStream.GetNextEntry()) != null)
 
-     //     {
 
-     //         //  Debug.Log("name is:"   zip.Name   " zipStream "   zipInStream);  
 
-     //         UnzipFile(zip, zipInStream, unPath);
 
-     //         countCount++;
 
-     //         jd = currSize * 1.0f / topSize;
 
-     //         if (countCount > 20)
 
-     //         {
 
-     //             countCount = 0;
 
-     //             Thread.Sleep(10);
 
-     //         }
 
-     //     }
 
-     //
 
-     //     zipInStream.Close();
 
-     //     isEnd = true;
 
-     // }
 
-     //
 
-     // private void UnzipFile(ZipEntry zip, ZipInputStream zipInStream, string dirPath)
 
-     // {
 
-     //     try
 
-     //     {
 
-     //         //文件名不为空  
 
-     //         if (!string.IsNullOrEmpty(zip.Name))
 
-     //         {
 
-     //             string filePath = dirPath;
 
-     //             string[] files = zip.Name.Split('/');
 
-     //             if (files.Length < 2)
 
-     //             {
 
-     //                 return;
 
-     //             }
 
-     //
 
-     //             filePath += "/" + files[files.Length - 1];
 
-     //          
 
-     //
 
-     //             //如果是一个新的文件路径 这里需要创建这个文件路径  
 
-     //             if (IsDirectory(filePath))
 
-     //             {
 
-     //                 Debug.Log("Create  file paht " + filePath);
 
-     //                 if (!Directory.Exists(filePath))
 
-     //                 {
 
-     //                     Directory.CreateDirectory(filePath);
 
-     //                 }
 
-     //             }
 
-     //             else
 
-     //             {
 
-     //                 MemoryStream ms = new MemoryStream();
 
-     //
 
-     //                 int size = 0;
 
-     //
 
-     //                 //每次读取2MB  直到把这个内容读完  
 
-     //                 while (true)
 
-     //                 {
 
-     //                     size = zipInStream.Read(zipData, 0, zipData.Length);
 
-     //                     //小于0, 也就读完了当前的流  
 
-     //                     if (size > 0)
 
-     //                     {
 
-     //                         currSize += size;
 
-     //                         ms.Write(zipData, 0, size);
 
-     //                     }
 
-     //                     else
 
-     //                     {
 
-     //                         break;
 
-     //                     }
 
-     //                 }
 
-     //
 
-     //                 ms.Flush();
 
-     //                 byte[] fileData = ms.ToArray();
 
-     //                 File.WriteAllBytes(filePath, fileData);
 
-     //                 if (zip.Name.Contains("md5File"))
 
-     //                 {
 
-     //                     File.WriteAllBytes(md5Path, fileData);
 
-     //                 }
 
-     //
 
-     //                 ms.Close();
 
-     //                 ms.Dispose();
 
-     //             }
 
-     //         }
 
-     //     }
 
-     //     catch (Exception e)
 
-     //     {
 
-     //         Debug.LogError("解压错误"+zip.Name);
 
-     //         Debug.Log(e);
 
-     //     }
 
-     // }
 
-     //
 
-     // /// <summary>  
 
-     // /// 判断是否是目录文件  
 
-     // /// </summary>  
 
-     // /// <param name="path"></param>  
 
-     // /// <returns></returns>  
 
-     // private bool IsDirectory(string path)
 
-     // {
 
-     //     if (path[path.Length - 1] == '/')
 
-     //     {
 
-     //         return true;
 
-     //     }
 
-     //
 
-     //     return false;
 
-     // }
 
- }
 
 
  |