public void ExeSyncCmd(string sourcePath, string targetPath)
        {
            _errorMessage = "File sync is not finish.";

            if (!Directory.Exists(RsyncSetting.Config.RsyncExeLogPath))
            {
                Directory.CreateDirectory(RsyncSetting.Config.RsyncExeLogPath);
            }

            var targetDir = string.Join("\\", targetPath.Split('\\').Take(targetPath.Split('\\').Length - 1));

            if (Directory.Exists(targetDir))
            {
                Directory.Delete(targetDir, true);
            }
            Directory.CreateDirectory(targetDir);

            string rsyncExe = "", rsyncExePath = "";

            rsyncExe = RsyncSetting.Config.RsyncExeName + " " + RsyncSetting.Config.RsyncExeOption + " \""
                       + RsyncSetting.ConvertToRsyncFormat(sourcePath) + "\" \""
                       + RsyncSetting.ConvertToRsyncFormat(targetPath) + "\" "
                       + " --log-file=" + RsyncSetting.GetRsyncLogFileFullPath()
                       + " --log-file-format=\"%i %o %f\"";
            rsyncExePath = RsyncSetting.Config.RsyncExePath;
            Log.WriteLog("Cmd execute: " + rsyncExe);
            ExeCmd(rsyncExe, rsyncExePath);
        }
        static void Main(string[] args)
        {
            RsyncSetting.SetConfigSettings();
            RsyncSetting.RuntimeSettings.ScheduleStartTime = RsyncDateTime.GetNow(RsyncDateTime.TimeFormatType.YearSMonthSDateTimeChange);
            Log.WriteLog("#######################################################################");
            Log.WriteLog("Rsync schedule start.");
            SyncResultRecords.Init();
            if (CheckScheduleReady("DownloadCenterRsync"))
            {
                try
                {
                    //1.取api list
                    var api    = new ApiService();
                    var result = api.GetFileList();
                    if (string.IsNullOrEmpty(result))
                    {
                        throw new Exception("Get file list api failed.");
                    }
                    var fileList     = JsonConvert.DeserializeObject <dynamic>(result);
                    var syncDataList = (IEnumerable <dynamic>)fileList.syncdata;
                    var delDataList  = (IEnumerable <dynamic>)fileList.deletedata;
                    Log.WriteLog("Will to deal records sync(" + syncDataList.Count() + ") + del(" + delDataList.Count() + ")");
                    if (syncDataList.Count() + delDataList.Count() > 0)
                    {
                        //2.確認工廠連線
                        if (RsyncSetting.Config.TargetServerTest ||
                            !CheckConnectionOK(RsyncSetting.Config.TargetServerIp))
                        {
                            Log.WriteLog("Reset factory vnet");
                            api.RestFactoryGatway();
                            if (!CheckConnectionOK(RsyncSetting.Config.TargetServerIp))
                            {
                                throw new Exception("Connect to factory (IP:" + RsyncSetting.Config.TargetServerIp + ") failed.");
                            }
                        }

                        //3.確認StoreSimple連線
                        var cmd = new NetCommand();
                        if (!cmd.ExeLoginCmd())
                        {
                            throw new Exception("Not login source server :" + RsyncSetting.Config.SourceServerIP);
                        }
                        if (!cmd.ExeLoginFactoryCmd())
                        {
                            throw new Exception("Not login target server :" + RsyncSetting.Config.TargetServerIp);
                        }

                        //4.rsync
                        SyncData(syncDataList);
                        DeleteData(delDataList);

                        if (SyncResultRecords.All().Count > 0)
                        {
                            RsyncSetting.RuntimeSettings.RsyncResultMessage = GenerateResultMessage(SyncResultRecords.All());
                        }
                    }
                    else
                    {
                        Log.WriteLog("No file need to be sync");
                        RsyncSetting.RuntimeSettings.RsyncResultMessage =
                            "<font color = \"#4A72A2\" size = \"2\" face = \"Verdana, sans-serif\">"
                            + "No file need to be sync </font>";
                    }
                }
                catch (Exception e)
                {
                    Log.WriteLog(e.Message, Log.Type.Exception);
                    RsyncSetting.RuntimeSettings.RsyncResultMessage =
                        "<font color = \"#c61919\" size = \"2\" face = \"Verdana, sans-serif\">" + e.Message + "</font>";
                }
            }
            else
            {
                Log.WriteLog("Wait for anoher schedule is finish", Log.Type.Failed);
                RsyncSetting.RuntimeSettings.RsyncResultMessage =
                    "<font color = \"#c61919\" size = \"2\" face = \"Verdana, sans-serif\">"
                    + "Waiting for anoher schedule is finish</font>";
            }

            Mail mail = new Mail();

            mail.Send();
            Log.WriteLog("Rsync schedule finish.");
        }