4.上传相关-生成AB包资源对比文件
4.1 知识点
AB包资源对比文件需求分析
- 在菜单栏添加一个按钮,用于触发该功能
- 遍历AB包文件夹,获取所有AB包文件信息
- 将AB包的文件名、大小、MD5码存入资源对比文件中
- 注意:该功能只会在Unity编辑器中使用,不会在游戏中使用,所以我们可以将代码放入到Editor文件夹中,就不会被打包出去了
创建生成AB对比文件的类放在Editor文件夹下,拷贝上节课生成MD5码的函数
public class CreateABCompare
{
private static string GetMD5(string filePath)
{
//将文件以流的形式打开
using (FileStream file = new FileStream(filePath, FileMode.Open))
{
//声明一个MD5对象 用于生成MD5码
MD5 md5 = new MD5CryptoServiceProvider();
//利用API 得到数据的MD5码 16个字节 数组
byte[] md5Info = md5.ComputeHash(file);
//关闭文件流
file.Close();
//把16个字节转换为 16进制 拼接成字符串 为了减小md5码的长度
StringBuilder sb = new StringBuilder();
for (int i = 0; i < md5Info.Length; i++)
sb.Append(md5Info[i].ToString("x2"));
return sb.ToString();
}
}
}
定义一个有菜单栏点击特性的生成AB包对比文件的函数。得到AB包文件夹下的所有AB包,进行拼接AB包名,大小和MD5码,存入到一个文本文件中
[MenuItem("AB包工具/创建对比文件")]
public static void CreateABCompareFile()
{
//获取文件夹信息
DirectoryInfo directory = Directory.CreateDirectory(Application.dataPath + "/ArtRes/AB/PC/");
//获取该目录下的所有文件信息
FileInfo[] fileInfos = directory.GetFiles();
//用于存储信息的 字符串
string abCompareInfo = "";
foreach (FileInfo info in fileInfos)
{
//没有后缀的 才是AB包 我们只想要AB包的信息
if(info.Extension == "")
{
//拼接一个AB包的信息
abCompareInfo += info.Name + " " + info.Length + " " + GetMD5(info.FullName);
//用一个分隔符分开不同文件之间的信息
abCompareInfo += '|';
}
}
//因为循环完毕后 会在最后由一个 | 符号 所以 把它去掉
abCompareInfo = abCompareInfo.Substring(0, abCompareInfo.Length - 1);
//存储拼接好的 AB包资源信息
File.WriteAllText(Application.dataPath + "/ArtRes/AB/PC/ABCompareInfo.txt", abCompareInfo);
//刷新编辑器
AssetDatabase.Refresh();
Debug.Log("AB包对比文件生成成功");
}
生成结果
4.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using UnityEditor;
using UnityEngine;
public class CreateABCompare
{
[MenuItem("AB包工具/创建对比文件")]
public static void CreateABCompareFile()
{
//获取文件夹信息
DirectoryInfo directory = Directory.CreateDirectory(Application.dataPath + "/ArtRes/AB/PC/");
//获取该目录下的所有文件信息
FileInfo[] fileInfos = directory.GetFiles();
//用于存储信息的 字符串
string abCompareInfo = "";
foreach (FileInfo info in fileInfos)
{
//没有后缀的 才是AB包 我们只想要AB包的信息
if(info.Extension == "")
{
//Debug.Log("文件名:" + info.Name);
//拼接一个AB包的信息
abCompareInfo += info.Name + " " + info.Length + " " + GetMD5(info.FullName);
//用一个分隔符分开不同文件之间的信息
abCompareInfo += '|';
}
//Debug.Log("**********************");
//Debug.Log("文件名:" + info.Name);
//Debug.Log("文件路径:" + info.FullName);
//Debug.Log("文件后缀:" + info.Extension);
//Debug.Log("文件大小:" + info.Length);
}
//因为循环完毕后 会在最后由一个 | 符号 所以 把它去掉
abCompareInfo = abCompareInfo.Substring(0, abCompareInfo.Length - 1);
//Debug.Log(abCompareInfo);
//存储拼接好的 AB包资源信息
File.WriteAllText(Application.dataPath + "/ArtRes/AB/PC/ABCompareInfo.txt", abCompareInfo);
//刷新编辑器
AssetDatabase.Refresh();
Debug.Log("AB包对比文件生成成功");
}
public static string GetMD5(string filePath)
{
//将文件以流的形式打开
using (FileStream file = new FileStream(filePath, FileMode.Open))
{
//声明一个MD5对象 用于生成MD5码
MD5 md5 = new MD5CryptoServiceProvider();
//利用API 得到数据的MD5码 16个字节 数组
byte[] md5Info = md5.ComputeHash(file);
//关闭文件流
file.Close();
//把16个字节转换为 16进制 拼接成字符串 为了减小md5码的长度
StringBuilder sb = new StringBuilder();
for (int i = 0; i < md5Info.Length; i++)
sb.Append(md5Info[i].ToString("x2"));
return sb.ToString();
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com