namespace MiniFS { internal enum Tips { MAPE, DATNE } internal class Objekts { public string Nosaukums { get; } public Objekts Vecaks; public List Berni = new(); private Tips tips; public Objekts(string nosaukums, Tips tips) { Nosaukums = nosaukums; this.tips = tips; } public bool IrMape() => tips == Tips.MAPE; public bool IrDatne() => tips == Tips.DATNE; public void Pievienot(bool vaiMape, string nosaukums) { if (!IrMape()) return; // Tikai mapes var saturēt bērnus if (Berni.Any(b => b.Nosaukums == nosaukums)) return; // Neļauj dublēt var berns = new Objekts(nosaukums, vaiMape ? Tips.MAPE : Tips.DATNE) { Vecaks = this }; Berni.Add(berns); } public void Dzest(string nosaukums) { var target = Berni.FirstOrDefault(x => x.Nosaukums == nosaukums); if (target == null) return; if (target.IrMape() && target.Berni.Count > 0) { Console.Write("Dzēst arī bērnus? (y/n): "); if (Console.ReadLine()?.ToLower() != "y") return; } Berni.Remove(target); } public void Print() { foreach (var x in Berni) Console.WriteLine(x.IrMape() ? "/" + x.Nosaukums : "~" + x.Nosaukums); } } class Program { static Objekts sakne = new("disk", Tips.MAPE); static Objekts aktiva = sakne; static void Main() { while (true) { Console.Write($"[{aktiva.Nosaukums}]> "); var cmd = Console.ReadLine()?.Split(); if (cmd == null || cmd.Length == 0) continue; switch (cmd[0]) { case "exit": return; case "mkdir": if (cmd.Length > 1) aktiva.Pievienot(true, cmd[1]); break; case "create": if (cmd.Length > 1) aktiva.Pievienot(false, cmd[1]); break; case "dir": aktiva.Print(); break; case "cd": if (cmd.Length > 1) { if (cmd[1] == ".." && aktiva.Vecaks != null) aktiva = aktiva.Vecaks; else { var next = aktiva.Berni.FirstOrDefault(x => x.Nosaukums == cmd[1] && x.IrMape()); if (next != null) aktiva = next; } } break; case "rm": if (cmd.Length > 1) aktiva.Dzest(cmd[1]); break; default: Console.WriteLine("Nezināma komanda"); break; } } } } }