4.生成AB包资源对比文件

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

×

喜欢就点赞,疼爱就打赏