zoukankan      html  css  js  c++  java
  • unity下载资源存储-生成md5

        IEnumerator GetText()
        {
            using (UnityWebRequest request = UnityWebRequest.Get("localhost:80/txt/test.txt"))
            {
                yield return request.Send();
    
                if (request.isError)
                {
                    Debug.Log(request.error);
                }
                else
                {
                    // Show results as text  
                    Debug.Log(request.downloadHandler.text);
    
                    // Or retrieve results as binary data  
                    byte[] data = request.downloadHandler.data;
                    //using (FileStream fs = new FileStream(path, FileMode.Create))
                    //{
                    //    fs.Write(data, 0, data.Length);
                    //    fs.Close();
                    //    fs.Dispose();
                    //}
                    writeFile(path, "34.txt", data);
                }
            }
        }

    1.采用webrequest下载文件,最终文件下载得到的是一个byte[]数组

    2.然后通过FileStream写文件的办法来存储文件,需要自己记录   文件名和后缀

        /// <summary>
        /// 获取webrequest下载的文件的byte[]来存储文件
        /// </summary>
        /// <param name="path"></param>
        /// <param name="fileName"></param>
        /// <param name="bytes"></param>
        void writeFile(string path, string fileName, byte[] bytes)
        {
            FileStream fs = new FileStream(path + "//" + fileName, FileMode.Create);   //打开一个写入流
            //string str = "写入文件";
            //byte[] bytes = Encoding.UTF8.GetBytes(str);
            fs.Write(bytes, 0, bytes.Length);
            fs.Flush();     //流会缓冲,此行代码指示流不要缓冲数据,立即写入到文件。
            fs.Close();     //关闭流并释放所有资源,同时将缓冲区的没有写入的数据,写入然后再关闭。
            fs.Dispose();   //释放流所占用的资源,Dispose()会调用Close(),Close()会调用Flush();    也会写入缓冲区内的数据。
        }

    3.然后生成md5码用于资源差异对比

        /// 获取文件的MD5码  
        /// </summary>  
        /// <param name="fileName">传入的文件名(含路径及后缀名)</param>  
        /// <returns></returns>  
        public string GetMD5HashFromFile(string fileName)
        {
            try
            {
                FileStream file = new FileStream(fileName, System.IO.FileMode.Open);
                MD5 md5 = new MD5CryptoServiceProvider();
                byte[] retVal = md5.ComputeHash(file);
                file.Close();
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < retVal.Length; i++)
                {
                    sb.Append(retVal[i].ToString("x2"));
                }
                return sb.ToString();
            }
            catch (Exception ex)
            {
                throw new Exception("GetMD5HashFromFile() fail,error:" + ex.Message);
            }
        }

     4.把这些信息写在一个Version.txt里面

    信息包括 文件名 大小 MD5码

    下载的时候拿到这个文件即可知道要下载哪些文件

    5.正式流程

    【1】下载远程Version.txt,获取其字符串

    【2】获取本地的Version.txt

    【3】如果本地不存在Version.txt,那么把要下载的文件路径存在一个字符串队列bundles里面

    【4】如果本地存在Version.txt,首先判断比较  删除服务器端没有的ab,然后把要下载的放在字符串队列bundles里面

    【5】遍历字符串队列bundles,挨个下载即可

    【6】最后存储最新的Version.txt文件

  • 相关阅读:
    Java Native Method
    SQL语句优化
    Ibatis的环境搭建以及遇到的问题解决
    Java 构建器
    SpringMVC自定义视图 Excel视图和PDF视图
    java 枚举的常见使用方法
    mysql 根据某些字段之和排序
    MFC The Screen Flickers When The Image Zoomed
    How To Debug Qmake Pro File
    Gcc And MakeFile Level1
  • 原文地址:https://www.cnblogs.com/sanyejun/p/9036150.html
Copyright © 2011-2022 走看看