static void Main(string[] args) { FARMode mode = FARMode.DIR; DirectoryInfo root = new DirectoryInfo(@"C:\test2"); Stack <Layer> history = new Stack <Layer>(); history.Push( new Layer { Content = root.GetFileSystemInfos().ToList(), SelectedItem = 0 } ); while (true) { if (mode == FARMode.DIR) { history.Peek().Draw(); } ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(); switch (consoleKeyInfo.Key) { case ConsoleKey.Delete: history.Peek().DeleteSelectedItem(); break; case ConsoleKey.UpArrow: history.Peek().SelectedItem--; break; case ConsoleKey.DownArrow: history.Peek().SelectedItem++; break; case ConsoleKey.Backspace: if (mode == FARMode.DIR) { history.Pop(); } else { mode = FARMode.DIR; Console.ForegroundColor = ConsoleColor.White; } break; case ConsoleKey.Enter: int x = history.Peek().SelectedItem; FileSystemInfo fileSystemInfo = history.Peek().Content[x]; if (fileSystemInfo.GetType() == typeof(DirectoryInfo)) { DirectoryInfo directoryInfo = fileSystemInfo as DirectoryInfo; history.Push( new Layer { Content = directoryInfo.GetFileSystemInfos().ToList(), SelectedItem = 0 }); } else { mode = FARMode.FILE; Console.BackgroundColor = ConsoleColor.White; Console.Clear(); Console.ForegroundColor = ConsoleColor.Black; using (StreamReader sr = new StreamReader(fileSystemInfo.FullName)) { Console.WriteLine(sr.ReadToEnd()); } } break; } } }
static void Main(string[] args) { FARMode mode = FARMode.DIR; // текущее состояние DirectoryInfo root = new DirectoryInfo(@"C:\Users\Айгерим\Desktop\Новая папка"); Stack <Layer> history = new Stack <Layer>(); // создаю stack history.Push( // закидываю нужную папку new Layer { Content = root.GetFileSystemInfos().ToList(), SelectedItem = 0 } ); while (true) { if (mode == FARMode.DIR) { history.Peek().Draw(); // обновляю каждый раз } ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(); // нажатие клавиш и необходимые действия switch (consoleKeyInfo.Key) { case ConsoleKey.Delete: // на клавише delete удалить history.Peek().DeleteSelectedItem(); history.Peek().SelectedItem++; break; case ConsoleKey.UpArrow: // листать вверх history.Peek().SelectedItem--; break; case ConsoleKey.DownArrow: // листать вниз history.Peek().SelectedItem++; break; case ConsoleKey.Backspace: // вернуться назад if (mode == FARMode.DIR) { history.Pop(); } else { mode = FARMode.DIR; Console.ForegroundColor = ConsoleColor.DarkRed; } break; case ConsoleKey.Enter: // открыть папку или файл int x = history.Peek().SelectedItem; FileSystemInfo fileSystemInfo = history.Peek().Content[x]; if (fileSystemInfo.GetType() == typeof(DirectoryInfo)) { DirectoryInfo directoryInfo = fileSystemInfo as DirectoryInfo; history.Push( new Layer { Content = directoryInfo.GetFileSystemInfos().ToList(), SelectedItem = 0 }); } else { mode = FARMode.FILE; Console.BackgroundColor = ConsoleColor.White; Console.Clear(); Console.ForegroundColor = ConsoleColor.Black; using (StreamReader sr = new StreamReader(fileSystemInfo.FullName)) { Console.WriteLine(sr.ReadToEnd()); } } break; } } }
static void Main(string[] args) { FARMode mode = FARMode.DIR; DirectoryInfo root = new DirectoryInfo(@"C:\");//basic directory// Stack <Layer> history = new Stack <Layer>(); history.Push( new Layer { Content = root.GetFileSystemInfos().ToList(), //print the list of files// SelectedItem = 0 //default selection of the first element// } ); while (true) { if (mode == FARMode.DIR) { history.Peek().Draw(); } ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(); //read key input// switch (consoleKeyInfo.Key) //different types of actions// { case ConsoleKey.Delete: //delete// history.Peek().DeleteSelectedItem(); break; case ConsoleKey.UpArrow: //up// history.Peek().SelectedItem--; break; case ConsoleKey.DownArrow: //down// history.Peek().SelectedItem++; break; case ConsoleKey.Backspace: //go back// if (mode == FARMode.DIR) { history.Pop(); //return last content of history without removing it// } else { mode = FARMode.DIR; Console.ForegroundColor = ConsoleColor.White; } break; case ConsoleKey.Enter: //open dir// int x = history.Peek().SelectedItem; FileSystemInfo fileSystemInfo = history.Peek().Content[x]; //get the content of the selected object// if (fileSystemInfo.GetType() == typeof(DirectoryInfo)) { DirectoryInfo directoryInfo = fileSystemInfo as DirectoryInfo; history.Push( new Layer //executes another code Layer with new info about directory// { Content = directoryInfo.GetFileSystemInfos().ToList(), //content of the new layer is from the directory// SelectedItem = 0 }); } else { mode = FARMode.FILE; Console.BackgroundColor = ConsoleColor.White; Console.Clear(); Console.ForegroundColor = ConsoleColor.Black; using (StreamReader sr = new StreamReader(fileSystemInfo.FullName)) { Console.WriteLine(sr.ReadToEnd()); } } break; } } }
static void Main(string[] args) { Stack <Layer> sl = new Stack <Layer>(); DirectoryInfo root = new DirectoryInfo(@"C: \Users\Asus\Desktop\Defends"); DirectoryInfo dir = root; sl.Push(new Layer() { Content = root.GetFileSystemInfos().ToList(), selectedItem = 0 }); FARMode mode = FARMode.DIR; while (true) { if (mode == FARMode.DIR) { sl.Peek().Draw(); } ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(); switch (consoleKeyInfo.Key) { case ConsoleKey.DownArrow: sl.Peek().SelectedItem++; break; case ConsoleKey.UpArrow: sl.Peek().SelectedItem--; break; case ConsoleKey.Enter: if (sl.Peek().Content.Count != 0) { FileSystemInfo fsi = sl.Peek().Content[sl.Peek().SelectedItem]; if (fsi.GetType() == typeof(DirectoryInfo)) { DirectoryInfo dir2 = dir = fsi as DirectoryInfo; sl.Push(new Layer { Content = dir2.GetFileSystemInfos().ToList(), selectedItem = 0 }); } else { mode = FARMode.FILE; Console.BackgroundColor = ConsoleColor.White; Console.Clear(); Console.ForegroundColor = ConsoleColor.Black; FileInfo dir2 = fsi as FileInfo; StreamReader sr = new StreamReader(fsi.FullName); Console.WriteLine(sr.ReadToEnd()); sr.Close(); } } break; case ConsoleKey.Backspace: if (mode == FARMode.DIR) { sl.Pop(); FileSystemInfo fsi = sl.Peek().Content[sl.Peek().SelectedItem]; dir = fsi as DirectoryInfo; } else { Console.ForegroundColor = ConsoleColor.White; mode = FARMode.DIR; } break; case ConsoleKey.Delete: if (mode == FARMode.DIR) { sl.Peek().Delete(); } break; case ConsoleKey.R: if (mode == FARMode.DIR) { sl.Peek().Draw(); sl.Peek().Rename(); sl.Peek().Content = dir.GetFileSystemInfos().ToList(); } break; default: break; } } }