public static void EncryptFile(System.IO.FileInfo src, DirectoryInfo des) { try { if (File.Exists(src.FullName)) { byte[] srcbyte = File.ReadAllBytes(src.FullName); byte[] retbyte; if (IsEncryptBatch) { retbyte = ConfigEncrypt.Encrypt(srcbyte); } else { retbyte = ConfigEncrypt.Decrypt(srcbyte); } string despath = des.FullName + "//" + src.Name; File.WriteAllBytes(despath, retbyte); } } catch (Exception e) { UnityEngine.Debug.LogError("加密文件出错" + e.Message); } }
string ReadZipFile(string fileName, bool isCacheBundle) { AssetBundle zipFile = null; string content = string.Empty; byte[] buffer = null; string zipName = null; using (CString.Block()) { CString sb = CString.Alloc(256); sb.Append("config"); int pos = fileName.LastIndexOf('/'); if (pos > 0) { sb.Append("_"); sb.Append(fileName, 0, pos).ToLower().Replace('/', '_'); fileName = fileName.Substring(pos + 1); } zipName = sb.ToString(); configMap.TryGetValue(zipName, out zipFile); } var isHaveCache = false; if (zipFile == null) { isHaveCache = false; zipFile = AssetBundle.LoadFromFile(ConfigConst.configResDir + "/" + zipName + Platform.AssetBundleExt); if (isCacheBundle) { configMap[zipName] = zipFile; } } else { isHaveCache = true; } if (zipFile != null) { #if UNITY_5 || UNITY_2017 || UNITY_2018 TextAsset configCode = zipFile.LoadAsset <TextAsset>(fileName); #else TextAsset configCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset; #endif if (configCode != null) { buffer = configCode.bytes; Resources.UnloadAsset(configCode); byte[] decrypt = ConfigEncrypt.Decrypt(buffer); content = System.Text.Encoding.UTF8.GetString(decrypt); } if (!isCacheBundle && !isHaveCache) { zipFile.Unload(true); } } return(content); }
private IEnumerator AsynReadFile(string fileName, bool isCacheBundle) { AssetBundle zipFile = null; string content = string.Empty; byte[] buffer = null; string zipName = null; using (CString.Block()) { CString sb = CString.Alloc(256); sb.Append("config"); int pos = fileName.LastIndexOf('/'); if (pos > 0) { sb.Append("_"); sb.Append(fileName, 0, pos).ToLower().Replace('/', '_'); fileName = fileName.Substring(pos + 1); } zipName = sb.ToString(); configMap.TryGetValue(zipName, out zipFile); } var isHaveCache = false; if (zipFile == null) { isHaveCache = false; AssetBundleCreateRequest assetBundleRequest; assetBundleRequest = AssetBundle.LoadFromFileAsync(ConfigConst.configResDir + "/" + zipName + Platform.AssetBundleExt); yield return(assetBundleRequest); if (assetBundleRequest.isDone) { zipFile = assetBundleRequest.assetBundle; if (isCacheBundle) { configMap[zipName] = zipFile; } } } else { isHaveCache = true; } if (zipFile != null) { TextAsset configCode = null; #if UNITY_5 || UNITY_2017 || UNITY_2018 AssetBundleRequest assetBundleRequest; assetBundleRequest = zipFile.LoadAssetAsync <TextAsset>(fileName); yield return(assetBundleRequest); if (assetBundleRequest.isDone) { configCode = (TextAsset)assetBundleRequest.asset; } #else configCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset; #endif if (configCode != null) { buffer = configCode.bytes; Resources.UnloadAsset(configCode); byte[] decrypt = ConfigEncrypt.Decrypt(buffer); content = System.Text.Encoding.UTF8.GetString(decrypt); } if (!isCacheBundle && !isHaveCache) { zipFile.Unload(true); } //回调 if (CallBacks.ContainsKey(fileName)) { Action <string> action = CallBacks[fileName]; if (action != null) { Delegate[] actions = action.GetInvocationList(); foreach (var dele in actions) { var act = (Action <string>)dele; try { act(content); } catch (Exception e) { Debuger.LogError("异步加载config文件出错 " + fileName + " " + e.Message); } } } CallBacks.Remove(fileName); } yield return(null); } }