// 下载资源列表文件 public async void DownloadResListFile() { using (UnityWebRequest webRequest = new UnityWebRequest($"{PathUtility.Instance.GetResListFileUrl()}/{m_ResListFileName}")) { await webRequest.SendWebRequest(); if (webRequest.isDone && !webRequest.isNetworkError) { ResListInfo onlineResListInfo = ResListInfo.Descriptor.Parser.ParseFrom(webRequest.downloadHandler.data) as ResListInfo; List <SingleResInfo> updateList = new List <SingleResInfo>(onlineResListInfo.Info.Count); // 预先设置容量 FileStream fs = new FileStream(PathUtility.Instance.GetResListFilePath(), FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite); if (File.Exists(PathUtility.Instance.GetResListFilePath())) // 之前更新过小版本 { int count = (int)fs.Length; byte[] fileData = new byte[count]; fs.Read(fileData, 0, count); ResListInfo curResListInfo = ResListInfo.Descriptor.Parser.ParseFrom(fileData) as ResListInfo; GetUpdateResPaths(onlineResListInfo, curResListInfo, ref updateList); } else // 第一次更新小版本 { GetUpdateResPaths(onlineResListInfo, null, ref updateList); } ModifyLocalResFile(updateList, () => { byte[] onlineData = onlineResListInfo.ToByteArray(); fs.Write(onlineData, 0, onlineData.Length); fs.Seek(0, SeekOrigin.Begin); fs.Close(); fs.Dispose(); }); } else { DebugUtility.Instance.Error("请求资源列表文件失败,失败原因为: " + webRequest.error); } } }