Exemplo n.º 1
0
    static void WriteABMD5()
    {
        DirectoryInfo directoryInfo = new DirectoryInfo(m_BunleTargetPath);

        FileInfo[] files = directoryInfo.GetFiles("*", SearchOption.AllDirectories);
        ABMD5      abmd5 = new ABMD5();

        abmd5.ABMD5List = new List <ABMD5Base> ();
        for (int i = 0; i < files.Length; i++)
        {
            if (!files[i].Name.EndsWith(".meta") && !files[i].Name.EndsWith(".manifest"))
            {
                ABMD5Base abmd5Base = new ABMD5Base();
                abmd5Base.Name = files[i].Name;
                abmd5Base.MD5  = MD5Manager.Instance.BuildFileMd5(files[i].FullName);
                abmd5Base.Size = files[i].Length / 1024.0f;
                abmd5.ABMD5List.Add(abmd5Base);
            }
        }
        string ABMD5Path = Application.dataPath + "/Resources/ABMD5.bytes";

        BinarySerializeOpt.BinarySerilize(ABMD5Path, abmd5);
        //将打版的版本拷贝到外部进行储存
        if (!Directory.Exists(m_VersionMd5Path))
        {
            Directory.CreateDirectory(m_VersionMd5Path);
        }
        string targetPath = m_VersionMd5Path + "/ABMD5_" + PlayerSettings.bundleVersion + ".bytes";

        if (File.Exists(targetPath))
        {
            File.Delete(targetPath);
        }
        File.Copy(ABMD5Path, targetPath);
    }
    /// <summary>
    /// 读取MD5
    /// </summary>
    public static void ReadABMD5(string path, string hotCount)
    {
        if (!File.Exists(path))
        {
            Debug.LogError("读取的Md5二进制文件不存在");
            return;
        }
        //旧版本的资源信息
        m_ABMD5BaseDir.Clear();
        using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.ReadWrite))
        {
            BinaryFormatter bf  = new BinaryFormatter();
            ABMD5           md5 = (ABMD5)bf.Deserialize(fs);
            for (int i = 0; i < md5.ABMD5BaseList.Count; i++)
            {
                m_ABMD5BaseDir.Add(md5.ABMD5BaseList[i].Name, md5.ABMD5BaseList[i]);
            }
        }
        //筛选更新的新版的资源
        List <string> changeList = new List <string>();

        string[] files = Directory.GetFiles(m_BuildABPath);
        for (int i = 0; i < files.Length; i++)
        {
            //剔除不需要的文件
            if (files[i].EndsWith(".meta") || files[i].EndsWith(".manifest"))
            {
                continue;
            }
            FileInfo fi = new FileInfo(files[i]);
            //新增的
            if (!m_ABMD5BaseDir.ContainsKey(fi.Name))
            {
                changeList.Add(fi.Name);
            }
            else
            {
                ABMD5Base md5base = null;
                if (m_ABMD5BaseDir.TryGetValue(fi.Name, out md5base))
                {
                    //改过的
                    string md5 = MD5Manager.Instance.BuildFileMd5(fi.FullName);
                    if (md5base.Md5 != md5)
                    {
                        changeList.Add(fi.Name);
                    }
                }
            }
        }
        //复制到制定的文件家,并序列化成XML
        CopyHotAssetAndCreateXml(changeList, hotCount);
    }
    /// <summary>
    /// 保存AssetBundleMd5信息
    /// </summary>
    public static void WriteABMd5()
    {
        //找到打包后Assetbundle的文件信息
        ABMD5 abmds = new ABMD5();

        abmds.ABMD5BaseList = new List <ABMD5Base>();
        string[] files = Directory.GetFiles(m_BuildABPath);
        for (int i = 0; i < files.Length; i++)
        {
            //剔除不需要的文件
            if (files[i].EndsWith(".meta") || files[i].EndsWith(".manifest"))
            {
                continue;
            }
            FileInfo  file = new FileInfo(files[i]);
            ABMD5Base ab   = new ABMD5Base();
            ab.Name = file.Name;
            ab.Md5  = MD5Manager.Instance.BuildFileMd5(file.FullName);
            ab.Size = file.Length / 1024.0f;
            abmds.ABMD5BaseList.Add(ab);
        }
        //序列化成二进制文件



        string path = Application.dataPath + "/Resources/ABMD5.bytes";

        if (File.Exists(path))
        {
            File.Delete(path);
        }
        FileStream      fs1 = new FileStream(path, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
        BinaryFormatter bf  = new BinaryFormatter();

        bf.Serialize(fs1, abmds);
        fs1.Close();
        //将写好的版本数据Copy到外不存储
        if (!Directory.Exists(m_ABMD5VersionPath))
        {
            Directory.CreateDirectory(m_ABMD5VersionPath);
        }
        string targetFile = m_ABMD5VersionPath + "/ABMD5" + PlayerSettings.bundleVersion + ".bytes";

        if (File.Exists(targetFile))
        {
            File.Delete(targetFile);
        }
        File.Copy(path, targetFile);
    }
Exemplo n.º 4
0
        static void ReadMd5Com(string abmd5Path, string hotCount, string des)
        {
            mpackedMd5.Clear();
            using (FileStream fileStream = new FileStream(abmd5Path, FileMode.Open, FileAccess.Read))
            {
                BinaryFormatter bf    = new BinaryFormatter();
                ABMD5           abmd5 = new ABMD5();
                abmd5.ABMD5List = new List <ABMD5Base>();
                if (fileStream.Length != 0)
                {
                    abmd5 = bf.Deserialize(fileStream) as ABMD5;
                }
                foreach (ABMD5Base abmd5Base in abmd5.ABMD5List)
                {
                    mpackedMd5.Add(abmd5Base.Name, abmd5Base);
                }
            }

            List <string> changeList = new List <string>();
            DirectoryInfo directory  = new DirectoryInfo(BundleTargetPath);

            FileInfo[] files = directory.GetFiles("*", SearchOption.AllDirectories);
            for (int i = 0; i < files.Length; i++)
            {
                if (!files[i].Name.EndsWith(".meta") && !files[i].Name.EndsWith(".manifest"))
                {
                    string    name      = files[i].Name;
                    string    md5       = Utility.FileHelper.GetMD5HashFromFile(files[i].FullName);
                    ABMD5Base abmd5Base = null;
                    if (!mpackedMd5.ContainsKey(name))
                    {
                        changeList.Add(name);
                    }
                    else
                    {
                        if (mpackedMd5.TryGetValue(name, out abmd5Base))
                        {
                            if (md5 != abmd5Base.Md5)
                            {
                                changeList.Add(name);
                            }
                        }
                    }
                }
            }

            CopyABAndGeneratXml(changeList, hotCount, des);
        }
Exemplo n.º 5
0
    /// <summary>
    /// 读取本地资源MD5码
    /// </summary>
    void ReadMD5()
    {
        m_PackedMd5.Clear();
        TextAsset md5 = Resources.Load <TextAsset> ("ABMD5");

        if (md5 == null)
        {
            Debug.LogError("未读取到本地MD5");
            return;
        }

        using (MemoryStream stream = new MemoryStream(md5.bytes)) {
            BinaryFormatter bf    = new BinaryFormatter();
            ABMD5           abmd5 = bf.Deserialize(stream) as ABMD5;
            foreach (ABMD5Base abmd5Base in abmd5.ABMD5List)
            {
                m_PackedMd5.Add(abmd5Base.Name, abmd5Base);
            }
        }
    }