/// <summary> /// 生成版本文件 /// </summary> private void OnCreateVersionFileCallBack() { string path = Application.dataPath + "/../AssetBundles/" + dal.GetVersion() + "/" + arrBuildTarget[buildTargetIndex]; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } string strVersionFilePath = path + "/VersionFile.txt"; //版本文件路径 //如果版本文件存在 则删除 IOUtil.DeleteFile(strVersionFilePath); StringBuilder sbContent = new StringBuilder(); DirectoryInfo directory = new DirectoryInfo(path); //拿到文件夹下所有文件 FileInfo[] arrFiles = directory.GetFiles("*", SearchOption.AllDirectories); sbContent.AppendLine(dal.GetVersion()); for (int i = 0; i < arrFiles.Length; i++) { FileInfo file = arrFiles[i]; if (file.Extension == ".manifest") { continue; } string fullName = file.FullName; //全名 包含路径扩展名 //相对路径 string name = fullName.Substring(fullName.IndexOf(arrBuildTarget[buildTargetIndex]) + arrBuildTarget[buildTargetIndex].Length + 1); string md5 = EncryptUtil.GetFileMD5(fullName); //文件的MD5 if (md5 == null) { continue; } string size = file.Length.ToString(); //文件大小 bool isFirstData = false; //是否初始数据 bool isEncrypt = false; bool isBreak = false; for (int j = 0; j < m_List.Count; j++) { foreach (string xmlPath in m_List[j].PathList) { string tempPath = xmlPath; if (xmlPath.IndexOf(".") != -1) { tempPath = xmlPath.Substring(0, xmlPath.IndexOf(".")); } name = name.Replace("\\", "/"); if (name.IndexOf(tempPath, StringComparison.CurrentCultureIgnoreCase) != -1) { isFirstData = m_List[j].IsFirstData; isEncrypt = m_List[j].IsEncrypt; isBreak = true; break; } } if (isBreak) { break; } } string strLine = string.Format("{0}|{1}|{2}|{3}|{4}", name, md5, size, isFirstData ? 1 : 0, isEncrypt ? 1 : 0); sbContent.AppendLine(strLine); } IOUtil.CreateTextFile(strVersionFilePath, sbContent.ToString()); MMO_MemoryStream ms = new MMO_MemoryStream(); string str = sbContent.ToString().Trim(); string[] arr = str.Split('\n'); int len = arr.Length; ms.WriteInt(len); for (int i = 0; i < len; i++) { if (i == 0) { ms.WriteUTF8String(arr[i]); } else { string[] arrInner = arr[i].Split('|'); ms.WriteUTF8String(arrInner[0]); ms.WriteUTF8String(arrInner[1]); ms.WriteULong(ulong.Parse(arrInner[2])); ms.WriteByte(byte.Parse(arrInner[3])); ms.WriteByte(byte.Parse(arrInner[4])); } } string filePath = path + "/VersionFile.bytes"; //版本文件路径 byte[] buffer = ms.ToArray(); ms.Dispose(); ms.Close(); buffer = ZlibHelper.CompressBytes(buffer); using (FileStream fs = new FileStream(filePath, FileMode.Create)) { fs.Write(buffer, 0, buffer.Length); fs.Close(); fs.Dispose(); } Debug.Log("创建版本文件成功"); }