protected static void ValidateFolderAction(FolderDestAction folderAction) { DirectoryInfo di = new DirectoryInfo(folderAction.DestFullName); switch (folderAction.Type) { case FolderDestAction.ActionType.Create: if (di.Exists) { //throw new InvalidOperationException(); return; } break; case FolderDestAction.ActionType.Delete: if (!di.Exists) { //throw new InvalidOperationException(); return; } break; default: throw new InvalidOperationException(); } }
private void CreateDestPlan() { #region Folder stuff. List <FolderDestAction> list_FolderDestActions = new List <FolderDestAction>(); foreach (FolderElm folderElm in this._srcMain.FolderElm_List) { if (folderElm.RelativePath == "\\") { continue; } var di_Dest = new DirectoryInfo(this._destMain.DI_main.FullName + folderElm.RelativePath); if (di_Dest.Exists) { continue; } var folderAction = new FolderDestAction { DestFullName = di_Dest.FullName, Type = FolderDestAction.ActionType.Create, }; list_FolderDestActions.Add(folderAction); } foreach (FolderElm folderElm in this._destMain.FolderElm_List) { if (folderElm.RelativePath == "\\") { continue; } var di_Src = new DirectoryInfo(this._srcMain.DI_main.FullName + folderElm.RelativePath); if (di_Src.Exists) { continue; } var folderAction = new FolderDestAction { DestFullName = this._destMain.DI_main.FullName + folderElm.RelativePath, Type = FolderDestAction.ActionType.Delete, }; list_FolderDestActions.Add(folderAction); } #endregion #region File stuff. List <FileDestAction> list_FileDestActions = new List <FileDestAction>(); var srcFiles = this._srcMain.FileElm_List; var destFiles = this._destMain.FileElm_List; var tmpIdx = 100; var dif1 = FileElm.BasicComparison(srcFiles[0 + tmpIdx], srcFiles[1 + tmpIdx]); // -1 var dif2 = FileElm.BasicComparison(srcFiles[1 + tmpIdx], srcFiles[2 + tmpIdx]); // -1 var dif_2 = FileElm.BasicComparison(srcFiles[2 + tmpIdx], srcFiles[1 + tmpIdx]); // 1 var list_srcBasicEquals = new List <FileElm>(); var list_destBasicEquals = new List <FileElm>(); int srcIdx = 0; int destIdx = 0; while (srcIdx != srcFiles.Count() || destIdx != destFiles.Count()) { if (srcIdx != srcFiles.Count() && destIdx == destFiles.Count()) { var srcFile = srcFiles[srcIdx]; FileDestAction fileAction = CreateFileCopyAction(srcFile); list_FileDestActions.Add(fileAction); srcIdx++; continue; } else if (srcIdx == srcFiles.Count() && destIdx != destFiles.Count()) { var destFile = destFiles[destIdx]; FileDestAction fileAction = CreateFileDeleteAction(destFile); list_FileDestActions.Add(fileAction); destIdx++; continue; } else { var srcFile = srcFiles[srcIdx]; var destFile = destFiles[destIdx]; if (srcFile.RelativeFullName == "\\IbsHaythamMagdiTask.v12.suo") { srcIdx = srcIdx; } var basicComp = FileElm.BasicComparison(srcFile, destFile); if (basicComp == 0) { var srcIdx_2 = srcIdx; var destIdx_2 = destIdx; list_destBasicEquals.Clear(); list_srcBasicEquals.Clear(); //// tmp //list_srcBasicEquals = list_destBasicEquals; var basicComp_2 = basicComp; var fullNameComp = FileElm.FullNameComparison(srcFile, destFile); //for (int k = destIdx; k < destFiles.Count && fullNameComp != 0 && basicComp_2 == 0; k++) for (destIdx_2 = destIdx; destIdx_2 < destFiles.Count && basicComp_2 == 0; destIdx_2++) { list_destBasicEquals.Add(destFiles[destIdx_2]); //fullNameComp = FileElm.FullNameComparison(srcFile, destFiles[destIdx_2]); basicComp_2 = FileElm.BasicComparison(srcFile, destFiles[destIdx_2]); } basicComp_2 = basicComp; fullNameComp = FileElm.FullNameComparison(srcFile, destFile); for (srcIdx_2 = destIdx; srcIdx_2 < srcFiles.Count && basicComp_2 == 0; srcIdx_2++) { list_destBasicEquals.Add(srcFiles[srcIdx_2]); //fullNameComp = FileElm.FullNameComparison(srcFiles[srcIdx_2], destFile); basicComp_2 = FileElm.BasicComparison(srcFiles[srcIdx_2], destFile); //throw new NotImplementedException(); } var list_all = list_srcBasicEquals.Select(x => new { FileElm = x, From = 'S', }).ToList(); list_all.AddRange(list_destBasicEquals.Select(x => new { FileElm = x, From = 'D', })); list_all.Sort((x, y) => { return(FileElm.FullNameComparison(x.FileElm, y.FileElm)); }); for (int k = 0; k < list_all.Count(); k++) { } throw new NotImplementedException(); if (srcFile.RelativeFullName != destFile.RelativeFullName) { FileDestAction fileAction = CreateFileMoveAction(srcFile, destFile); list_FileDestActions.Add(fileAction); } srcIdx++; destIdx++; continue; } else if (basicComp < 0) { FileDestAction fileAction = CreateFileCopyAction(srcFile); list_FileDestActions.Add(fileAction); srcIdx++; continue; } else if (basicComp > 0) { FileDestAction fileAction = CreateFileDeleteAction(destFile); list_FileDestActions.Add(fileAction); destIdx++; continue; } } } var destPlan = new DestPlan { FolderDestActions = list_FolderDestActions, FileDestActions = list_FileDestActions, }; #endregion _destPlan = destPlan; }