private static void CopyFileToSplitFolder(Dictionary <string, ABInfo> updateList) { string updateOutPath = Path.Combine(UpdateOutPath, ResFolderName); //总的资源目录 // ExportResources.CheckDirectory(updateOutPath); string verPath = Path.Combine(UpdateOutVersionPath, ResFolderName); //特定版本资源目录用于资源备份 // ExportResources.CheckDirectory(verPath); int allLen = updateList.Count; int i = 0; Debug.LogFormat("CopyFileToSplitFolder.Count = {0}", updateList.Count); EditorUtility.DisplayProgressBar("Copy Change AssetBundle File", "copy file to " + updateOutPath + updateList.Count, 0.09f); string sourcePath; string outfilePath, outfileVerionPath; string key, extension; uint crc = 0; StringBuilder erro = new StringBuilder(); foreach (var k in updateList) { key = k.Key;//CUtils.GetAssetBundleName(k.Key); // Debug.LogFormat(" update file = {0},{1},{2};", k.Key, k.Value.abName, k.Value.assetPath); if (string.IsNullOrEmpty(k.Value.assetPath)) { continue; } sourcePath = Path.Combine(Application.dataPath, k.Value.assetPath); if (!File.Exists(sourcePath)) // { string e = string.Format("copy file ({0}) not Exists ", sourcePath); Debug.LogWarning(e); erro.AppendLine(e); continue; } extension = System.IO.Path.GetExtension(key); crc = (uint)k.Value.crc32; if (crc != 0) { if (string.IsNullOrEmpty(extension)) { key = EditorUtils.InsertAssetBundleName(key + Common.CHECK_ASSETBUNDLE_SUFFIX, "_" + crc.ToString()); } else if (extension == Common.DOT_BYTES) { key = key.Replace(extension, Common.CHECK_ASSETBUNDLE_SUFFIX); key = EditorUtils.InsertAssetBundleName(key, "_" + crc.ToString());// } else { key = EditorUtils.InsertAssetBundleName(key, "_" + crc.ToString());// } } outfilePath = Path.Combine(updateOutPath, key); outfileVerionPath = Path.Combine(verPath, key); // Debug.LogFormat("{0} copy to {1}", outfilePath, outfileVerionPath); // uint filelen = 0; uint copyFileCrc = 0; // var resType = HugulaSetting.instance.backupResType; // if (resType == CopyResType.VerResFolder) // { FileHelper.CheckCreateFilePathDirectory(outfileVerionPath); File.Copy(sourcePath, outfileVerionPath, true); // copy to v{d}/res folder copyFileCrc = CrcCheck.GetLocalFileCrc(outfileVerionPath, out filelen); // } // if (resType == CopyResType.OneResFolder) // { // FileHelper.CheckCreateFilePathDirectory(outfilePath); // File.Copy(sourcePath, outfilePath, true);// copy to /res folder // copyFileCrc = CrcCheck.GetLocalFileCrc(outfilePath, out filelen); // } //check file crc if (copyFileCrc != crc) { string e = string.Format("crc(source{0}!=copy{1}),path={2}", crc, copyFileCrc, outfilePath); Debug.LogError(e); erro.AppendLine(e); } EditorUtility.DisplayProgressBar("copy file to split folder " + updateOutPath, " copy file =>" + i.ToString() + "/" + allLen.ToString(), i / allLen); i++; } Debug.Log(" copy file complete!"); EditorUtility.ClearProgressBar(); string errContent = erro.ToString(); if (!string.IsNullOrEmpty(errContent)) { string tmpPath = EditorUtils.GetAssetTmpPath(); EditorUtils.CheckDirectory(tmpPath); string outPath = Path.Combine(tmpPath, "error.txt"); Debug.Log("write to path=" + outPath); using (StreamWriter sr = new StreamWriter(outPath, true)) { sr.WriteLine(" Error : " + System.DateTime.Now.ToString()); sr.Write(errContent); } } }
/// <summary> /// Creates the streaming crc list. /// </summary> /// <param name="sb">Sb.</param> public static uint CreateStreamingCrcList(FileManifest sb, string fileListName, bool firstExists = false, bool copyToResFolder = false) { sb.appNumVersion = CodeVersion.APP_NUMBER; sb.newAppNumVersion = CodeVersion.APP_NUMBER; sb.version = CodeVersion.APP_VERSION; var crc32filename = CUtils.GetAssetName(fileListName); string tmpPath = EditorUtils.GetAssetTmpPath();// Path.Combine(Application.dataPath, BuildScript.TmpPath); EditorUtils.CheckDirectory(tmpPath); string assetPath = "Assets/" + EditorUtils.TmpPath + crc32filename + ".asset"; EditorUtility.DisplayProgressBar("Generate streaming crc file list", "write file to " + assetPath, 0.99f); AssetDatabase.CreateAsset(sb, assetPath); string crc32outfilename = CUtils.GetRightFileName(fileListName); // Debug.Log("write to path=" + outPath); //读取crc string abPath = string.Empty; string resOutPath = null; uint fileSize = 0; uint fileCrc = 0; if (copyToResFolder) { resOutPath = tmpPath;//Path.Combine(tmpPath, ResFolderName); //Path.Combine(SplitPackage.UpdateOutPath, ResFolderName); abPath = Path.Combine(resOutPath, crc32outfilename); BuildScript.BuildABs(new string[] { assetPath }, resOutPath, crc32outfilename, DefaultBuildAssetBundleOptions); fileCrc = CrcCheck.GetLocalFileCrc(abPath, out fileSize); //copy crc list FileInfo finfo = new FileInfo(abPath); // var resType = HugulaSetting.instance.backupResType; // if (resType == CopyResType.VerResFolder) // { string verPath = Path.Combine(UpdateOutVersionPath, ResFolderName); //特定版本资源目录用于资源备份 string newName = Path.Combine(verPath, EditorUtils.InsertAssetBundleName(crc32outfilename, "_" + fileCrc.ToString())); FileHelper.CheckCreateFilePathDirectory(newName); if (File.Exists(newName)) { File.Delete(newName); } finfo.CopyTo(newName); // } // if (resType == CopyResType.OneResFolder) // { // string updateOutPath = Path.Combine(UpdateOutPath, ResFolderName);//总的资源目录 // string newName = Path.Combine(updateOutPath, EditorUtils.InsertAssetBundleName(crc32outfilename, "_" + fileCrc.ToString())); // FileHelper.CheckCreateFilePathDirectory(newName); // if (File.Exists(newName)) File.Delete(newName); // finfo.CopyTo(newName); // } } else { abPath = Path.Combine(CUtils.realStreamingAssetsPath, crc32outfilename); BuildScript.BuildABs(new string[] { assetPath }, null, crc32outfilename, DefaultBuildAssetBundleOptions); fileCrc = CrcCheck.GetLocalFileCrc(abPath, out fileSize); } // CrcCheck.Clear(); //copy first crc list if (!firstExists && File.Exists(abPath)) //如果没有首包 copy first package { string crc32FirstOutName = CUtils.InsertAssetBundleName(crc32outfilename, "_v" + CodeVersion.CODE_VERSION.ToString()); string destFirst = Path.Combine(UpdateOutPath, crc32FirstOutName); Debug.LogFormat("abpath={0},destFirst={1}:", abPath, destFirst); File.Copy(abPath, destFirst, true); } EditorUtility.ClearProgressBar(); // File.Delete(assetPath); Debug.Log("Crc file list assetbunle build complate! " + fileCrc.ToString() + abPath); return(fileCrc); }