} //1-DIR, 2-FILE_CONTENT //???? public static void ShowInnerFileSystemInfo(StackItem2 item) //с помощью данной функции получаем информацию о том, что внутри открытого объекта(папки здесь) { Console.BackgroundColor = ConsoleColor.Black; //цвет заднего плана Console.Clear(); //очищаем для предоставления места новым папкам и файлам после их открытия FileSystemInfo[] objects = item.DirInfo.GetFileSystemInfos(); //объекты (папки и файлы), принадлежащие FileSystem, создаем массив //FileInfo[] flinf = item.DirInfo.GetFiles(); // FileInfo fiObject = flinf[item.Index]; for (int i = 0; i < objects.Length; ++i) //пробегаемся по массиву из объектов fileSytem до конца { if (objects[i] is DirectoryInfo) { Console.ForegroundColor = ConsoleColor.Cyan; } else { Console.ForegroundColor = ConsoleColor.Blue; } if (i == item.Index) //если индекс остановился на объекте { Console.BackgroundColor = ConsoleColor.DarkGray; //Задаем цвет для объекта на котором мы остановились } else { Console.BackgroundColor = ConsoleColor.Black; } FileInfo fileinfo = objects[i] as FileInfo; if (fileinfo != null) { Console.WriteLine(fileinfo.CreationTime + "\t" + objects[i] + "\t " + " ----- " + "\t" + fileinfo.Length / 1024 + " " + "KB"); } //DirectoryInfo dinfo = objects[i] as DirectoryInfo; //if(dinfo != null) else { Console.WriteLine(objects[i].CreationTime + " \t" + objects[i]); //int count = dinfo.GetFiles().Length; } } }
static void Main(string[] args) { Stack <StackItem2> history = new Stack <StackItem2>(); // Stack StackItem2 item = new StackItem2 { DirInfo = new DirectoryInfo(@"C:\"), Index = 0 }; // элемент класса StackItem2 это папка С //get //set // item можно еще увидеть в классе VisualOperations, там оно используется для того, чтобы в указанном пути (С:\) именно тут рассматривать папки VisualOperations visualOperations = new VisualOperations(); // вызовим класс Visual Operations (в этом классе происходят работа с содержимым папки и файла) visualOperations.VisualMode = VisualMode.DIR; //????? history.Push(item); // заполняет Stack <StackItem2> объектами из указанной папки (его пути в экземпляре item (C:\)) bool isOK = true; while (isOK) { if (visualOperations.VisualMode == VisualMode.DIR) // если мы открыли папку { VisualOperations.ShowInnerFileSystemInfo(history.Peek()); // ?? начинаем пробегаться и показывать все содержимое этой папки с заданием цвета } ConsoleKeyInfo pressedButton = Console.ReadKey(); //ожидай команды связанной с клавишами(вверх,вниз) switch (pressedButton.Key) //switch — это оператор управления, выбирающий раздел switch для выполнения из списка кандидатов. { case ConsoleKey.UpArrow: history.Peek().Index = history.Peek().Index - 1; break; case ConsoleKey.DownArrow: history.Peek().Index = history.Peek().Index + 1; break; case ConsoleKey.Enter: StackItem2 item2 = new StackItem2(); StackItem2 topItem = history.Peek(); //верхний элемент стэка это верхний элемент FileSystemInfo[] info = topItem.DirInfo.GetFileSystemInfos(); FileSystemInfo fsObject = info[topItem.Index]; string path = fsObject.FullName; if (fsObject is DirectoryInfo) { item2.DirInfo = new DirectoryInfo(path); item2.Index = 0; history.Push(item2); } else if (fsObject is FileInfo) // если данный объект является файлом { visualOperations.VisualMode = VisualMode.FILE_CONTENT; VisualOperations.ShowFileContent(path); } break; case ConsoleKey.Backspace: //при нажимании на кнопку возврата назад if (visualOperations.VisualMode == VisualMode.FILE_CONTENT) //если мы находимся в файле { visualOperations.VisualMode = VisualMode.DIR; //то таким образом должны будем вепнуться обратно в папку } else { history.Pop(); // } break; case ConsoleKey.Escape: //принажатии на еск просто выходим из программы isOK = false; //вся составляющая команд не являестся больше децствительными break; } } }