Unity中编辑器拓展功能——文件校验

文件校验本质是通过比较两个文件的哈希值。这里边由于是比较两个文件夹下的内容是否相同,可能会出现很多个子文件夹的情况。所以采用了递归的方式去进行文件校验。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System;
using System.IO;
using System.Security.Cryptography;

public class MenuItemDemo 
{
    public static MenuItemDemo _instance;
    public static MenuItemDemo Instance {
        get { 
             if (_instance == null)
             {
                 _instance = new MenuItemDemo();
                 return _instance;
             }
            else {
                 return _instance;
             }
        }
    }

    private const string otherPath = @"C:\\Users\\Admin\\Desktop\\项目\\华为音乐\\UnityProject\\AIO SDK Library\\PICO\\VRSDK_pico";
    private const string path = @"C:\\Users\\Admin\\Desktop\\项目\\华为音乐\\UnityProject\\HuaweiVRMusic\\Assets\\AIO SDK\\VRSDK_pico";
    private int index = path.Length;
    [MenuItem("Tools/FileAndCompare")]
    static void CESHI()
    {
       Instance.GetFileAndCompare(path);
    }
    string GetHash(string path)
    {
        var hash = SHA1.Create();
        var stream = new FileStream(path, FileMode.Open);
        byte[] hashByte = hash.ComputeHash(stream);
        stream.Close();
        return BitConverter.ToString(hashByte).Replace("-", "");
    }
    public void GetFileAndCompare(string path)
    {
        string[] f = System.IO.Directory.GetFileSystemEntries(path);
        if (f.Length == 0)
        {
            return;
        }

        foreach (var fs in f)
        {
            if (Directory.Exists(fs))
            {
                //当前路径是文件夹,继续递归调用自身
                GetFileAndCompare(fs);
            }
            else
            {
                if (File.Exists(fs))
                {
                        //当前路径是文件,此时需要跟外部文件夹文件进行对比
                        string t_otherpath = fs.Substring(index, fs.Length - index);
                        if (File.Exists(otherPath + t_otherpath))
                        {//文件存在,比较两个文件是否相同
                            var isSame = GetHash(fs).Equals(GetHash(otherPath + t_otherpath));
                            if (!isSame)
                            {
                                Debug.LogWarning("文件" + fs + "存在差异!");
                            }
                            else
                            {
                                Debug.Log(fs + "文件相同");
                            }
                        }
                        else
                        { //文件不存在,输出当前文件不存在的信息
                            Debug.LogError("文件:" + fs + "不存在!");
                        }
                }
            }
        }
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
热更新框架设计系列课程总体介绍:     本系列课程由《热更新框架设计之Xlua基础》、《热更新框架设计之热更流程与热补丁技术》、《热更新框架设计之游戏客户端框架》三套课程组成。 三套课程是一个不可分割有机的整体,笔者带领大家由浅入深逐级深入 ,在领悟热更精髓的基础之上,通过高端架构设计,**完成设计出“低耦合”、“低侵入”、“高复用”性的游戏(VR/AR)客户端热更框架。《热更新框架设计之热更流程与热补丁技术》课程介绍:        本课程为热更框架系列课程的热更流程设计部分,主要起到承上启下的作用,为后续的框架大整合提供必要技术准备。本作主要通过“客户端与(下载)服务器内部数据核心交换”的示意图,给学员展现当今商业热更框架,基本与核心的热更流程实现原理与设计思考。    课程主要分为四大部分:    一: 热更流程核心脚本与接口开发、核心编辑器类开发。    二: IIS服务器安装与配置。    三:   lua脚本加载资源与整体热更流程检验。    四: 基于xlua的热补丁技术讲解与案例应用。 温馨提示:     1: 本套课程需要具备一定的框架理解与驾驭能力,为了更好的理解本作,强烈推荐广大学员首先学完必要的前导课程:“UI客户端框架设计”、“AssetBundle 框架设计”、“lua基础与级篇”。     2:  本课程使用Unity2017版本讲解,但是本课程主要讲解开发思想与具体实现技术,所以对Unity版本不敏感。 学员使用后续的Unity2018/19/2020..... 等版本基本没有影响。一、热更新系列(技术含量:高级):A:《lua热更新技术级篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架()》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:级): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程(上)》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程(下)》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初级)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之级篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初级) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS(二) 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初级):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值