コード例 #1
0
 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);
     }
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
            }
        }