private ModifierCollection GetNoDirModifiers(string moduleRootDir, DirectoryInfo dir) { ModifierCollection list = new ModifierCollection(); Modifier m = new Modifier(); m.ActionMode = ActionType.UpdateFile; m.FileMode = FileType.Directory; m.Path = PathHelper.GetServerPath(moduleRootDir, dir.FullName); list.Add(m); foreach (FileInfo file in dir.GetFiles()) { Modifier fm = new Modifier(); fm.FileMode = FileType.File; fm.ActionMode = ActionType.UpdateFile; fm.Path = file.FullName; list.Add(fm); } foreach (DirectoryInfo sub in dir.GetDirectories()) { list.Import(GetNoDirModifiers(moduleRootDir, sub)); } return(list); }
private ModifierCollection CompareDir(DirectoryInfo dir, XmlElement dirElement) { ModifierCollection list = new ModifierCollection(); XmlHelper h = new XmlHelper(dirElement); foreach (XmlElement subDir in h.GetElements("Directory")) { string name = subDir.GetAttribute("Name"); DirectoryInfo sd = null; foreach (DirectoryInfo sub in dir.GetDirectories()) { if (sub.Name == name) { sd = sub; break; } } if (sd == null) { Modifier m = new Modifier(); m.ActionMode = ActionType.SendDelete; m.FileMode = FileType.Directory; m.Path = PathHelper.GetServerPath(this, subDir); list.Add(m); } else { ModifierCollection mc = CompareDir(sd, subDir); list.Import(mc); } } foreach (DirectoryInfo sub in dir.GetDirectories()) { if (h.GetElement("Directory[@Name='" + sub.Name + "']") == null) { ModifierCollection mc = this.GetNoDirModifiers(this.LocalPath, sub); list.Import(mc); } } foreach (XmlElement subFile in h.GetElements("File")) { string name = subFile.GetAttribute("Name"); FileInfo file = null; foreach (FileInfo sub in dir.GetFiles()) { if (sub.Name != name) { continue; } file = sub; break; } if (file == null) { Modifier m = new Modifier(); m.ActionMode = ActionType.SendDelete; m.FileMode = FileType.File; m.Path = PathHelper.GetServerPath(this, subFile); list.Add(m); } else { string md5 = subFile.GetAttribute("MD5"); string fileMD5 = this.ComputeFileMD5(file); if (md5 != fileMD5) { Modifier m = new Modifier(); m.ActionMode = ActionType.UpdateFile; m.FileMode = FileType.File; m.Path = file.FullName; list.Add(m); } } } foreach (FileInfo sub in dir.GetFiles()) { if (h.GetElement("File[@Name='" + sub.Name + "']") == null) { Modifier m = new Modifier(); m.ActionMode = ActionType.UpdateFile; m.FileMode = FileType.File; m.Path = sub.FullName; list.Add(m); } } return(list); }