解压我用的第三方库lonic.zip,不喜欢也可以使用unity自己的 [code]csharpcode: using ICSharpCode.SharpZipLib.Zip; using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading; using UnityEngine; using Ionic.Zip; public class SynUpdateCourse : MonoBehaviour { //文件名称(包含路径) public List<string> fileNames = new List<string>(); void OnGUI() { if (GUI.Button(new Rect(0,0,200,60),"下载")) { fileNames = GetSpecificTypeFile("//ip/共享文件名","zip"); td = new Thread(Download); td.Start(); } } Thread td; //本地文件路径 string localPath = @"E:/同步测试"; //下载文件路径保存 public List<string> newFile = new List<string>(); //下载 void Download() { List<string> localFile = Director(localPath); for (int i = 0; i < fileNames.Count; i++) { string fileName = Path.GetFileName(fileNames[i]); string[] str = fileName.Split('.');//提取文件名(去除后缀) if (!localFile.Contains(str[0]))//如果本地文件不包含此压缩包名称 { UnityEngine.Debug.Log(str[0]); newFile.Add(localPath+"/"+ fileName);//添加需解压文件 File.Copy(fileNames[i], localPath + "/" + fileName);//从服务器复制到本地 } } UnityEngine.Debug.Log("下载完成"); Uncompress(newFile); td.Abort(); } int index=0;//递归下标 /// <summary> /// 解压文件 /// </summary> /// <param name="files">解压文件路径集合</param> void Uncompress(List<string> files) { using (Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile(files[index])) { //zip.Password = "111111";//压缩文件密码没有则注视本行 zip.ExtractProgress += (s, e) => { Zip_SaveProgress(s, e); }; zip.ExtractAll(localPath, ExtractExistingFileAction.InvokeExtractProgressEvent);//解压至本地文件夹路径 zip.Dispose(); } } /// <summary> /// 解压进度监听事件,不是很好用,但是可以确认是否解压结束 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Zip_SaveProgress(object sender, ExtractProgressEventArgs e) { string progress = ""; if (e.EventType == ZipProgressEventType.Extracting_AfterExtractAll) progress = e.EntriesExtracted.ToString() + "/" + e.EntriesTotal.ToString(); UnityEngine.Debug.Log("解压中"+progress); if (e.EntriesExtracted!=0&& e.EntriesTotal!=0&&e.EntriesExtracted==e.EntriesTotal) { UnityEngine.Debug.Log("已解压"+(index+1)+"个"); index++; Uncompress(newFile); } } /// <summary> /// 获取文件夹下的文件夹名称列表 /// </summary> /// <param name="path">文件夹路径</param> /// <returns></returns> public static List<string> Director(string path) { List<string> fileName = new List<string>(); DirectoryInfo d = new DirectoryInfo(path); DirectoryInfo[] directs = d.GetDirectories();//文件夹 //获取子文件夹内的文件列表,递归遍历 foreach (DirectoryInfo dd in directs) { fileName.Add(dd.Name); } return fileName; } /// <summary> /// 获取特定类型文件 /// </summary> /// <param name="path">查询目录路径</param> /// <param name="type">类型</param> public List<string> GetSpecificTypeFile(string path,string type) { return Directory.GetFiles(path,"*."+type).ToList(); } }
Unity打包后解压失败的话可以去Unity安装目录找到几个I18开头的dll文件,放到工程里,就好了