Ejemplo n.º 1
0
        /// <summary>
        /// 新老版本两版软件之间的需要更新的文件列表,老软件信息可以为null
        /// </summary>
        /// <param name="verOld">老软件信息,可以为null</param>
        /// <param name="verNew">新版软件信息,可以为null</param>
        public static DownloadList CompareToDownloadList(SoftFile verOld, SoftFile verNew)
        {
            DownloadList downloadList = new DownloadList
            {
                targetVersion = verNew.version //目标版本
            };

            if (verOld != null)
            {
                downloadList.curVersion = verOld.version;//当前版本
            }

            //遍历所有新文件
            foreach (var item in verNew.files)
            {   //如果这一项在老文件里包含了,那么就不用下载
                if (verOld == null || !verOld.IsContainFile(item))
                {
                    DownloadFileItem dfi = new DownloadFileItem(item);
                    if (verNew.rootUrl.EndsWith("/"))
                    {
                        dfi.url = verNew.rootUrl + dfi.relativePath;
                    }
                    else
                    {
                        dfi.url = verNew.rootUrl + "/" + dfi.relativePath;
                    }
                    downloadList.files.Add(dfi);
                }
            }

            return(downloadList);
        }
Ejemplo n.º 2
0
 static private byte[] GetTags(SoftFile file)
 {
     byte[][] tags = new byte[file.Tags.Count][];
     for (int i = 0; i < file.Tags.Count; i++)
     {
         tags[i] = Extension.Combine(Extension.GetBytes((ushort)file.Tags[i].Length), Encoding.ASCII.GetBytes(file.Tags[i]));
     }
     return(Extension.Combine(Extension.GetBytes((ushort)file.Tags.Count), Extension.Combine(tags)));
 }
Ejemplo n.º 3
0
        ///-------------------------------------------------------------------------------------------------
        /// <summary> 计算一个软件版本文件. </summary>
        ///
        /// <remarks>
        ///    "version" : [1,0,0,0],
        ///     "rootPath" : "C:\\Program Files\\MRSystem",
        ///     "rootUrl"  : "http://mr.xuexuesoft.com:8010/soft/MRSystem/v1.0.0.0/",
        ///     "files"    : [
        ///    {
        ///        "relativePath" : "CamHelper.dll",
        ///        "fileSize"     : 88064,
        ///        "SHA256"       : "9D8B396F753A9679ACDBC731535742C1B946A480330DD13B131B16C4E56DB3A7"
        ///    },
        ///    {
        ///        "relativePath" : "Cjwdev.WindowsApi.dll",
        ///        "fileSize"     : 56320,
        ///        "SHA256"       : "212DAAF6E93D762F55DC900DF87BBB32FF191E6BEF1F57E185E04EEB2A671CC8"
        ///    },
        ///
        ///    Dx, 2019/6/27. </remarks>
        ///
        /// <param name="rootPath">     写进json的软件安装目录. </param>
        /// <param name="version">      . </param>
        /// <param name="rootUrl">      . </param>
        /// <param name="dirPath">      要计算的文件夹. </param>
        /// <param name="saveJsonPath"> 要保存的json文件位置. </param>
        ///-------------------------------------------------------------------------------------------------
        public static void CreateSoftVersionFile(string rootPath, uint[] version, string rootUrl, string dirPath, string saveJsonPath)
        {
            if (version == null || version.Length != 4)
            {
                Log.Error($"IncrementalUpdate.CreateConfigFile():版本号规定为4个长度的uint数组!");
                return;
            }

            DirectoryInfo di = new DirectoryInfo(dirPath);

            if (!di.Exists)
            {
                Log.Error($"IncrementalUpdate.CreateConfigFile():文件夹不存在{di.FullName}!");
                return;
            }

            SoftFile softFile = new SoftFile
            {
                version  = version,
                rootPath = rootPath,
                rootUrl  = rootUrl
            };

            FileInfo[] fis = di.GetFiles("*", SearchOption.AllDirectories);//无筛选的得到所有文件
            for (int i = 0; i < fis.Length; i++)
            {
                Fileitem item = new Fileitem();
                //生成相对路径:这个文件的完整目录中替换根目录的部分即可,最后切分文件夹都使用斜杠/ (unity的API中基本是/)
                //相对路径结果前面不带斜杠
                if (di.FullName.EndsWith("\\") || di.FullName.EndsWith("/"))
                {
                    item.relativePath = fis[i].FullName.Substring(di.FullName.Length).Replace("\\", "/");
                }
                else
                {
                    //为了相对路径结果前面不带斜杠,所以+1
                    item.relativePath = fis[i].FullName.Substring(di.FullName.Length + 1).Replace("\\", "/");
                }
                item.fileSize = fis[i].Length;
                item.SHA256   = fis[i].SHA256();
                //计算然后添加到结果
                softFile.files.Add(item);
            }

            StreamWriter sw = File.CreateText(saveJsonPath);
            JsonWriter   jw = new JsonWriter(sw)
            {
                PrettyPrint = true
            };

            JsonMapper.ToJson(softFile, jw);
            sw.Flush();
            sw.Close();
        }
Ejemplo n.º 4
0
 static private byte[] GetSoftfile(SoftFile softFile)
 {
     return(Extension.Combine(Extension.GetBytes(softFile.Description.Length), Encoding.ASCII.GetBytes(softFile.Description), Extension.GetBytes((int)softFile.Id), Extension.GetBytes((ushort)softFile.Name.Length), Encoding.ASCII.GetBytes(softFile.Name), Extension.GetBytes((ushort)softFile.Thumbnail.Length), Encoding.ASCII.GetBytes(softFile.Thumbnail), Extension.GetBytes((ushort)softFile.Hash.Length), Encoding.ASCII.GetBytes(softFile.Hash), GetTags(softFile)));
 }