예제 #1
0
        static void BuildSynFile(string baseDir)
        {
            DirectoryInfo dInfo = new DirectoryInfo(baseDir);
            //string targetName = Directory.GetParent(baseDir) + "\\.syn";
            string targetName = dInfo + "\\.syn";

            //BuildSynFile(baseDir, targetName);

            if (File.Exists(targetName))
            {
                Stopwatch watch = new Stopwatch();
                watch.Start();

                byte[] bytesOldSyn         = File.ReadAllBytes(targetName);
                SynchronizationFile synOld = bytesOldSyn.GetObject <SynchronizationFile>();

                SynchronizationFile synChanged = GlobalUtil.GetSynFileChangeState(dInfo.FullName, synOld,
                                                                                  true, true,
                                                                                  null,
                                                                                  null);

                GlobalUtil.ReportSynFile(synChanged, Console.Out);

                Progress("准备在同名目录下创建补丁更新包...");
                GlobalUtil.CreatePatchCabinet(synChanged, baseDir, Path.GetFullPath(Path.Combine(baseDir, "patch.cab.syn")));

                Progress("更新目录结构文件");
                File.WriteAllBytes(Path.Combine(baseDir, "changed.syn"), synChanged.GetBytes());

                watch.Stop();
                if (watch.ElapsedMilliseconds > 1000)
                {
                    Progress("已处理完成,本次操作共计耗时{0:0.00}秒!", (double)watch.ElapsedMilliseconds / 1000.00);
                }
                else
                {
                    Progress("已处理完成,本次操作共计耗时{0}毫秒!", watch.ElapsedMilliseconds);
                }
                return;
            }

            string siteRoot             = AppDomain.CurrentDomain.BaseDirectory;
            SynchronizationFile synFile = GlobalUtil.GetSynFile(dInfo.FullName, true, true,

                                                                str => Console.WriteLine(string.Format("{0}",
                                                                                                       str.Replace(siteRoot, "").Replace(baseDir, "").Replace("\\", "/"))),

                                                                p => Progress(string.Format("已完成{0}",
                                                                                            Regex.Replace((p * 100).ToString("0.00") + "%...", "\\.0{1,}(%...)$", "%")))
                                                                );

            GlobalUtil.ReportSynFile(synFile, Console.Out);
            File.WriteAllBytes(targetName, synFile.GetBytes());
        }