public Загрузчик(string ИмяФайла, int МаксимумУровней, Action <ДеревоМетаданных, string, long> Делегат) { КореньДерева = new ДеревоМетаданных(ИмяФайла, null, null); Файл = new FileInfo(ИмяФайла); long азмер = Файл.Length; var ЧтениеТекста = Файл.OpenText(); ДеревоМетаданных ТекущаяВетвь = КореньДерева; bool НайденоНачало = false; while (!ЧтениеТекста.EndOfStream) { string Строка = ЧтениеТекста.ReadLine(); int Отступ = Строка.LastIndexOf(Ключ.Табуляция); while (ТекущаяВетвь != null) { if (ТекущаяВетвь.Отступ >= Отступ) { ТекущаяВетвь = ТекущаяВетвь.одитель; } else { break; } } if (ТекущаяВетвь == null) { ТекущаяВетвь = КореньДерева; } if (!НайденоНачало) { if (Строка.Contains(Ключ.Начало)) { НайденоНачало = true; ТекущаяВетвь = new ДеревоМетаданных(Ключ.Начало, КореньДерева, КореньДерева); } continue; } ТекущаяВетвь = new ДеревоМетаданных(Строка, ТекущаяВетвь, КореньДерева); Делегат(ТекущаяВетвь, Строка, азмер); } }
public ДеревоМетаданных(string Имя, ДеревоМетаданных одитель, ДеревоМетаданных Корень) { суммаВложенных = 0; Отступ = Имя.LastIndexOf(Ключ.Табуляция); this.Имя = Имя.Trim(); this.одитель = одитель; this.Корень = Корень; Подчиненные = new List <ДеревоМетаданных>(); try { одитель?.Подчиненные.Add(this); } catch (Exception e) { } if (одитель != null) { уровень = одитель.уровень + 1; } else { уровень = 0; } }
public List <ДеревоМетаданных> ПолучитьРазличияРекурсией(ДеревоМетаданных ВетвьДерева2, Action <ДеревоМетаданных, string, long> Делегат) { List <ДеревоМетаданных> езультат = new List <ДеревоМетаданных>(); foreach (var Лист in Подчиненные) { Делегат(Лист, Лист.Имя, 1); if (Лист.Имя.Contains(Ключ.Порядок)) { continue; } var Лист2 = ВетвьДерева2.НайтиПодчиненногоПоИмени(Лист.Имя); if (Лист2 != null) { var азличия = Лист.ПолучитьРазличияРекурсией(Лист2, Делегат); езультат.AddRange(азличия); continue; } Лист.СуммаВложенныхРазличий = 1; езультат.Add(Лист); } return(езультат); }