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, , 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 = ; 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文件
unity下载资源存储-生成md5的更多相关文章
- Java生成MD5加密字符串代码实例
这篇文章主要介绍了Java生成MD5加密字符串代码实例,本文对MD5的作用作了一些介绍,然后给出了Java下生成MD5加密字符串的代码示例,需要的朋友可以参考下 (1)一般使用的数据库中都会保存用 ...
- Linux下通过md5sum生成MD5文件&校验MD5
生成md5值 随便找个文件执行:md5sum file_name 即可生成该文件对应md5值. 也可以一次生成多个文件的md5值:md5sum file_name1 file_name2 file_ ...
- [深入浅出WP8.1(Runtime)]生成图片和存储生成的图片文件
7.2.3 使用RenderTargetBitmap类生成图片 RenderTargetBitmap类可以将可视化对象转换为位图,也就是说它可以将任意的UIElement以位图的形式呈现.那么我们在实 ...
- ReferentialConstraint 中的依赖属性映射到由存储生成的列
ReferentialConstraint 中的依赖属性映射到由存储生成的列 这个问题是由于从表中的外键关系建立错误(可能是由于误改),查看从表的所有外键关系,即可找到问题所在. 问题: 什么是从表? ...
- 几个代码片段-计算程序运行时间+获得当前目录+生成MD5
计算程序运行时间 long startTime = System.currentTimeMillis(); System.out.println("程序运行时间: " + (Sys ...
- Linux下c基于openssl生成MD5的函数
Linux下openssl提供了一系列哈希及加密的函数,如果调用openssl提供的MD5函数生成任意字符串的MD5呢?下面提供了一段代码实现Linux下c字符串生成md5的函数. 具体代码: 1 2 ...
- Entity Framework问题:ReferentialConstraint 中的依赖属性映射由存储生成的列
原文:Entity Framework问题:ReferentialConstraint 中的依赖属性映射由存储生成的列 今天在采用Entity Framework 的Database First反向以 ...
- C#生成MD5的方法
///C#生成MD5的方法 public static string GetMD5(string sDataIn) { MD5CryptoServiceProvider md5 = new MD5Cr ...
- java项目打包生成MD5文件
之所以发出这篇博客,因为我前几天搞这个问题搞了几天,各种百度居然都没有找到相关的案例,虽然很简单的事件.可是百度博客上面居然都搜不到案例o(* ̄︶ ̄*)o觉得奇怪!!! 新总监来了,项目要上线,以前都 ...
随机推荐
- Eclipse的Debug调试技巧大全
转载 原文链接:https://blog.csdn.net/u011781521/article/details/55000066 收藏方便以后查看. 19:18:10 2018-12-29
- UT源码162
(3)设计佣金问题的程序 commission方法是用来计算销售佣金的需求,手机配件的销售商,手机配件有耳机(headphone).手机壳(Mobile phone shell).手机贴膜(Cellp ...
- SPOJ 8222. Substrings(后缀自动机模板)
后缀自动机+dp. 后缀自动机主要是在functioner大牛那里学习的:http://blog.sina.com.cn/s/blog_70811e1a01014dkz.html 这道题是在No_st ...
- 关于typedef的用法总结(装)
不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些 ...
- linux 挂载和使用文件系统
从分区,到创建文件系统,再到把磁盘或分区挂载到一个目录后才能够使用. Windows或Mac系统会自动进行挂载,一旦创建好文件系统后会自动挂载到系统上,Windows我们称之为C\D盘,而Linux需 ...
- MVC4 基于 Unity Ioc 框架的 ControllerFactory
首先引入Untiy框架. 可以在NuGet程序包 管理器中直接安装. 新建 继承DefaultControllerFactory 的UnityControllerFactory: 重写虚方法GetC ...
- Android-相对布局(RelativeLayout)
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android=&qu ...
- Django ajax方法提交表单,及后端接受数据
前台代码: {% block content %} <div class="wrapper wrapper-content"> <div class=" ...
- 单例模式(Singleton)小记
概念 引用维基百科对单例的说明: 单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在. 继续引用维基百科的实现思路: 实现单例模式的思路是:一个类 ...
- C# try catch finally
抛出异常开销非常大(相对而言),所以不要过多的在程序中使用它们 既然finally一定是要执行的,即使try块中有return