static void Main(string[] args) { DirectoryInfo Dir = new DirectoryInfo(@"C:\Users\Admin\Desktop\Alikhan"); Lawer l = new Lawer // папкаларды,файлдарды,индексті көрсететін класс құрамыз { DirCon = Dir.GetDirectories(), //DirCon массиві үшін Dir директорясында папканың адресін көрсетеміз FileCon = Dir.GetFiles(), selectedIndex = 0 }; l.Draw(); FSIMode Mod = FSIMode.DirectoryInfo; //папкалар үшін жаңа FSI(enum) құрамыз Stack <Lawer> contral = new Stack <Lawer>(); //жаңа стэк құрамыз contral.Push(l); // стэкке class(l) ді енгіземіз bool work = false; while (!work) { if (Mod == FSIMode.DirectoryInfo) //егер FSI(enum) папка болса { contral.Peek().Draw(); //стэкка Draw функциясын көрсетеміз Console.BackgroundColor = ConsoleColor.Blue; Console.WriteLine("Deleted: Deleted | Rename: R | Back: Bakcspace | Open: Enter"); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; } ConsoleKeyInfo key = Console.ReadKey(); // басылған консолдың клавиштерін сипаттайды switch (key.Key) // { case ConsoleKey.UpArrow: //егер стрелка жоғарыны бассақ if (contral.Peek().selectedIndex > 0) { contral.Peek().selectedIndex--; // қызыл курсор бірінші элементтен жоғары бармайды } break; case ConsoleKey.DownArrow: //егер стрелка төменді бассақ if (contral.Peek().selectedIndex < contral.Peek().DirCon.Length + contral.Peek().FileCon.Length - 1) { contral.Peek().selectedIndex++; //қызыл курсор соңғы элементтен төмен түспейді } break; case ConsoleKey.Enter: // егер Enter-ді бассақ int ind = contral.Peek().selectedIndex; // if (contral.Peek().selectedIndex < contral.Peek().DirCon.Length) //егер ол папканың индексі болса { DirectoryInfo di = contral.Peek().DirCon[contral.Peek().selectedIndex]; //жаңа папка ашамыз сол индекстегі Lawer nl = new Lawer // жаңа класс Lawer-ны құрастырамыз { DirCon = di.GetDirectories(), //Диркон массивіне ди папкысын адресін көрсетеміз FileCon = di.GetFiles(), //Файлкон массивіне ди файлдарының адресін көрсетеміз selectedIndex = 0 }; contral.Push(nl); //стэкка nl класын енгіземіз } else { Mod = FSIMode.File; // Егер FSI(enum) файл болса FileStream fl = new FileStream(contral.Peek().FileCon[contral.Peek().selectedIndex - contral.Peek().DirCon.Length].FullName, FileMode.Open, FileAccess.Read); // файлдың индекстерін аламыз StreamReader sr = new StreamReader(fl); Console.BackgroundColor = ConsoleColor.Black; //файлды қара фонға бояйды Console.ForegroundColor = ConsoleColor.White; //файлдағы ақпаратты ақ түске бояйды Console.Clear(); //барлығын кетіреміз Console.WriteLine(sr.ReadToEnd()); //файлдағы ақпаратты оқимыз сонына дейін fl.Close(); sr.Close(); } break; case ConsoleKey.Backspace: //егер Backspace-ты бассақ if (Mod == FSIMode.DirectoryInfo) //егер FSI(enum) папка болса { contral.Pop(); //бетіндегі консолды толығымен кетіреді } else //егер FSI(enum) файл болса { Mod = FSIMode.DirectoryInfo; //онда файлдың бастапқы папкасын қайтарады } break; case ConsoleKey.Escape: //егер Escape-ты бассақ work = true; //онда консол жұмысын тоқтатады break; case ConsoleKey.Delete: //егер Delete-ты бассақ int index = contral.Peek().selectedIndex; int a = contral.Peek().DirCon.Length; int b = contral.Peek().FileCon.Length; if (index < a) //Егер индекс папканың индексаны келсе { Directory.Delete(contral.Peek().DirCon[index].FullName); //көрсетілген индекстегі папканы кетіреміз } else //Егер индекс файлдың индексаны келіп тұрса { File.Delete(contral.Peek().FileCon[index - a].FullName); //көрсетілген индекстегі файлды кетіреміз } contral.Pop(); //соңғы бөлігін кетіріп ,одан бұрынғы бөлікті шығарады if (contral.Count == 0) //Егер басапқы бөлікте болсақ { Lawer nl = new Lawer //жаңа класс құрамыз { DirCon = Dir.GetDirectories(), // FileCon = Dir.GetFiles(), // selectedIndex = 0 }; contral.Push(nl); //стэкка nl класын енгіземіз } else //егер бастапқы бөлікте болмасақ { DirectoryInfo dif = contral.Peek().DirCon[index]; Lawer nl = new Lawer { DirCon = dif.GetDirectories(), //Диркон массивына диф папкасындағы папкаларды енгіземіз FileCon = dif.GetFiles(), //Диркон массивына диф папкасындағы файлдарды енгіземіз selectedIndex = 0 }; contral.Push(nl); //осыларды стэкка енгіземіз } break; case ConsoleKey.R: //Егерде R-ды бассақ index = contral.Peek().selectedIndex; // a = contral.Peek().DirCon.Length; //папкалардың санын бөлек санға теңестіріп b = contral.Peek().FileCon.Length; //файлдардың санын бөлек санға теңестіріп аламыз string name, fullname; int IndexMode; if (index < a) // Егер индекс папкаға көрсетсе { name = contral.Peek().DirCon[index].Name; //папканың атың строка түрінде оқимыз fullname = contral.Peek().DirCon[index].FullName; //папканың толық атын строка түрінде оқимыз IndexMode = 1; } else { name = contral.Peek().FileCon[index - a].Name; //файлдың атын строка түрінде оқимыз fullname = contral.Peek().FileCon[index - a].FullName; //файлдың толық атын строка түрінде окимыз IndexMode = 2; } fullname = fullname.Remove(fullname.Length - name.Length); //ақпартаттың толық атының адресін құрамыз Console.WriteLine("ename: Please to write a new name:"); string newname = Console.ReadLine(); //папка немесе файлдың жаңа атын жазамыз if (IndexMode == 1) //егер ақпарат папка болса { new DirectoryInfo(contral.Peek().DirCon[index].FullName).MoveTo(fullname + newname); //папканы жаңа атымен бірге ауыстырамыз } else { new FileInfo(contral.Peek().FileCon[index - a].FullName).MoveTo(fullname + newname); //файлды жаңа атымен бірге ауыстырамызы } contral.Pop(); //стэктың соңғы элементін кетіреміз if (contral.Count == 0) //егер стэк бос болса { Lawer nl = new Lawer //онда жаңа класс ашып оған бастапқы папканың мәліметтерін теңестіреміз { DirCon = Dir.GetDirectories(), FileCon = Dir.GetFiles(), selectedIndex = 0 }; contral.Push(nl); //және оны стэкка қосамыз } else //егер стэк бос болмаса { DirectoryInfo dif = contral.Peek().DirCon[index]; //онда біз ашқан соңғы папканың мәліметтерін жаңа класс құру арқылы теңестерімез Lawer nl = new Lawer { DirCon = dif.GetDirectories(), FileCon = dif.GetFiles(), selectedIndex = 0 }; contral.Push(nl); } break; } } }