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文件

  • 相关阅读:
    最近面试有感,不要耍小聪明,面试官都是开了上帝视角的
    Mac OS X上编写 ASP.NET vNext 系列中断和再开声明
    Mac OS X 上编写 ASP.NET vNext (二) IDE配置
    Mac OS X上编写 ASP.NET vNext(一)KRE环境搭建
    Redhat Linux /etc/profile 与 /etc/bashrc 的区别
    IIS7 Application Pool Integrate Mode 和 Classic Mode 的区别
    Linux 学习笔记(一) 入门
    SQL Server 常用分页SQL
    winform 如何控制输入法
    winform 记录全局异常捕获
  • 原文地址:https://www.cnblogs.com/sanyejun/p/9036150.html
Copyright © 2011-2022 走看看