static void Main(string[] args) { DirectoryInfo root = new DirectoryInfo(@"C:\Users\acer\Desktop\File"); Stack <Layer> history = new Stack <Layer>(); //Creating a Stack/Deque FarMode farMode = FarMode.DirectoryView; history.Push( //filling a stack new Layer { Content = root.GetFileSystemInfos(), // SelectedItem = 0 }); while (true) //Loop { if (farMode == FarMode.DirectoryView) { history.Peek().Draw(); //Showing files } ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(); switch (consoleKeyInfo.Key) { case ConsoleKey.UpArrow: history.Peek().SelectedItem--; break; case ConsoleKey.DownArrow: history.Peek().SelectedItem++; break; case ConsoleKey.Enter: int x = history.Peek().SelectedItem; //Goes further to the directory if it is type of directiry FileSystemInfo fileSystemInfo = history.Peek().Content[x]; if (fileSystemInfo.GetType() == typeof(DirectoryInfo)) { DirectoryInfo d = fileSystemInfo as DirectoryInfo; history.Push(new Layer { Content = d.GetFileSystemInfos(), SelectedItem = 0 }); } else { farMode = FarMode.FileView; //IF it a document using (FileStream fs = new FileStream(fileSystemInfo.FullName, FileMode.Open, FileAccess.Read)) //initializing new class to open txt file { using (StreamReader sr = new StreamReader(fs)) { Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; Console.Clear(); Console.WriteLine(sr.ReadToEnd()); } } } break; } } }
public void Process(ConsoleKeyInfo pressedKey) { switch (pressedKey.Key) { case ConsoleKey.UpArrow: activeLayer.Process(-1); break; case ConsoleKey.DownArrow: activeLayer.Process(1); break; case ConsoleKey.Enter: try { Console.Clear(); if (activeLayer.items[activeLayer.index].GetType() == typeof(DirectoryInfo)) { mode = FarMode.Explorer; layerHistory.Push(activeLayer); activeLayer = new Layer(activeLayer.GetSelectedItemInfo(), 0); } else if (activeLayer.items[activeLayer.index].GetType() == typeof(FileInfo)) { mode = FarMode.FileReader; } else if (mode == FarMode.Rename) { activeLayer = layerHistory.Pop(); } } catch (Exception e) { activeLayer = layerHistory.Pop(); } break; case ConsoleKey.Backspace: if (mode == FarMode.Explorer) { activeLayer = layerHistory.Pop(); } else if (mode == FarMode.FileReader) { mode = FarMode.Explorer; } break; case ConsoleKey.R: activeLayer.items[activeLayer.index].Delete(); layerHistory.Push(activeLayer); mode = FarMode.Rename; break; default: break; } }
public void Process(ConsoleKeyInfo pressedKey) { switch (pressedKey.Key) { case ConsoleKey.UpArrow: LastDir.Action(-1); break; case ConsoleKey.DownArrow: LastDir.Action(1); break; case ConsoleKey.Enter: try { if (LastDir.elements[LastDir.index].GetType() == typeof(DirectoryInfo)) { mode = FarMode.Directory; DirStory.Push(LastDir); LastDir = new Dir(LastDir.GetSelectedElementInfo(), 0); } else if (LastDir.elements[LastDir.index].GetType() == typeof(FileInfo)) { mode = FarMode.File; } } catch (Exception e) { LastDir = DirStory.Pop(); } break; case ConsoleKey.Backspace: if (mode == FarMode.Directory) { if (DirStory.Count != 0) { LastDir = DirStory.Pop(); } else { Console.Clear(); Console.WriteLine("Nothing to see!"); } } else if (mode == FarMode.File) { mode = FarMode.Directory; } break; default: break; } }
static bool PathExists(string path, FarMode mode) // Проверка пути { if ((mode == FarMode.DirectoryView && new DirectoryInfo(path).Exists) || (mode == FarMode.FileView && new FileInfo(path).Exists)) { return(true); } else { return(false); } }
private void DrawRenameWindow() { Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.Green; Console.Clear(); int w = -1; string s = current.Rename(); DirectoryInfo a = current.dirInfo; FileSystemInfo[] b = a.GetFileSystemInfos(); for (int i = 0; i < b.Length; ++i) { if (b[i].Name == s) { w = i; } } mode = FarMode.Explorer; Refresh(w); Draw(); }
static void Main(string[] args) { DirectoryInfo root = new DirectoryInfo(@"C:\Users\Nursat\Desktop\test"); //рут - информация о файле или папке Stack <Layer> history = new Stack <Layer>(); //создаю стак FarMode farMode = FarMode.DirectoryView; //фармод = дайректори вью history.Push( //добавление в стак new Layer //создание новой переменной типа лэйер { Content = root.GetFileSystemInfos(), //контент = все файлы и папки из рут Selected = 0 //селектед =0 } ); while (true) //бесконечный цикл { if (farMode == FarMode.DirectoryView) //если фармод = дайректори { history.Peek().Draw(); //вызов функции дроу } ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(); //бинды switch (consoleKeyInfo.Key) //свитч кейсы { case ConsoleKey.UpArrow: //1 кейс - апэрроу history.Peek().Selected--; //уменьшение селектед на 1 break; case ConsoleKey.DownArrow: //2 кейс - даунэрроу history.Peek().Selected++; //увеличение селектед на 1 break; case ConsoleKey.Enter: //3 кейс - интер int i = history.Peek().Selected; //ай = селектед FileSystemInfo fileSystemInfo = history.Peek().Content[i]; //информация о элементе ай контента if (fileSystemInfo.GetType() == typeof(DirectoryInfo)) //если файлсистем инфо - папка { history.Push( //добавление в стак new Layer //создание новой переменной типа лэйер { Content = (fileSystemInfo as DirectoryInfo).GetFileSystemInfos(), //контент = все файлы и папки из файлсистеминфо Selected = 0 //селектед = 0 } ); } else // иначе { farMode = FarMode.FileView; //фармод = файлвью using (FileStream fs = new FileStream(fileSystemInfo.FullName, FileMode.Open, FileAccess.Read)) //файлстрим для просмотра { using (StreamReader sr = new StreamReader(fs)) //стримридер { Console.BackgroundColor = ConsoleColor.White; //фон - белый Console.ForegroundColor = ConsoleColor.Black; //шрифт - черный Console.Clear(); //очистить консоль Console.WriteLine(sr.ReadToEnd()); //вывод всего текста из файла } } } break; case ConsoleKey.Backspace: //4 кейс - бэкспэйс if (farMode == FarMode.DirectoryView) //если фармод = дайректори { history.Pop(); //удалить последний добавленный } else //иначе { farMode = FarMode.DirectoryView; //фармод = дайректори Console.ForegroundColor = ConsoleColor.White; //шрифт - белый } break; case ConsoleKey.Delete: //5 кейс = делит int j = history.Peek().Selected; //джей = селектед FileSystemInfo fsi = history.Peek().Content[j]; //информация о элемента джей контента if (fsi.GetType() == typeof(DirectoryInfo)) //если фси = папка { Directory.Delete(fsi.FullName, true); //удалить фси history.Peek().Content = (fsi as DirectoryInfo).Parent.GetFileSystemInfos(); //контент = перент папка фси } else //иначе { File.Delete(fsi.FullName); //удалить фси history.Peek().Content = (fsi as FileInfo).Directory.GetFileSystemInfos(); //контент = папка файла фси } break; case ConsoleKey.F9: //6 кейс - ф9 int x = history.Peek().Selected; //икс = селектед FileSystemInfo fsi2 = history.Peek().Content[x]; //информация о элементе икс контента Console.BackgroundColor = ConsoleColor.Black; //фон - черный Console.ForegroundColor = ConsoleColor.White; //фон - белый Console.Clear(); //очистить консоль string rename = Console.ReadLine(); //вводим в строку if (fsi2.GetType() == typeof(DirectoryInfo)) //если фси2 = папка { string pathOfDir = (fsi2 as DirectoryInfo).Parent.FullName; //в стринг хаписываем перент папку string repath = Path.Combine(pathOfDir, rename); //в стринг записываем путь с файлом Directory.Move(fsi2.FullName, repath); //переносим из одного пути в другой history.Peek().Content = (fsi2 as DirectoryInfo).Parent.GetFileSystemInfos(); //контент = перент папка } else //иначе { rename = rename + ".txt"; //в строку добавляем тхт string pathOfFile = (fsi2 as FileInfo).Directory.FullName; //в строку записываем путь папки файла string repath1 = Path.Combine(pathOfFile, rename); //в строку записываем путь с названием файла File.Move(fsi2.FullName, repath1); //переносим из одного пути в другой history.Peek().Content = (fsi2 as FileInfo).Directory.GetFileSystemInfos(); //контент = папка файла } break; } } }
static void Main(string[] args) { DirectoryInfo root = new DirectoryInfo(@"C:\test"); Stack <Layer> history = new Stack <Layer>(); FarMode farMode = FarMode.DirectoryView; history.Push( new Layer { Content = root.GetFileSystemInfos(), SelectedItem = 0 }); while (true) { if (farMode == FarMode.DirectoryView) { history.Peek().Draw(); } ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(); switch (consoleKeyInfo.Key) { case ConsoleKey.UpArrow: history.Peek().SelectedItem--; break; case ConsoleKey.DownArrow: history.Peek().SelectedItem++; break; case ConsoleKey.Enter: int x = history.Peek().SelectedItem; FileSystemInfo fileSystemInfo = history.Peek().Content[x]; if (fileSystemInfo.GetType() == typeof(DirectoryInfo)) { DirectoryInfo d = fileSystemInfo as DirectoryInfo; history.Push(new Layer { Content = d.GetFileSystemInfos(), SelectedItem = 0 }); } else { farMode = FarMode.FileView; using (FileStream fs = new FileStream(fileSystemInfo.FullName, FileMode.Open, FileAccess.Read)) { using (StreamReader sr = new StreamReader(fs)) { Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; Console.Clear(); Console.WriteLine(sr.ReadToEnd()); } } } break; case ConsoleKey.Backspace: if (farMode == FarMode.DirectoryView) { history.Pop(); } else if (farMode == FarMode.FileView) { farMode = FarMode.DirectoryView; Console.ForegroundColor = ConsoleColor.White; } break; case ConsoleKey.Delete: int x2 = history.Peek().SelectedItem; FileSystemInfo fileSystemInfo2 = history.Peek().Content[x2]; if (fileSystemInfo2.GetType() == typeof(DirectoryInfo)) { DirectoryInfo d = fileSystemInfo2 as DirectoryInfo; Directory.Delete(fileSystemInfo2.FullName, true); history.Peek().Content = d.Parent.GetFileSystemInfos(); } else { FileInfo f = fileSystemInfo2 as FileInfo; File.Delete(fileSystemInfo2.FullName); history.Peek().Content = f.Directory.GetFileSystemInfos(); } history.Peek().SelectedItem--; break; } } }
static void Main(string[] args) { DirectoryInfo dir = new DirectoryInfo(@"C:\Users\Yermukhan-Laptop\source\repos\QWERTY"); // Provides class instance methods for creating, // move and enumerate in directories and subdirectories. This class is not inherited. Stack <Layer> st = new Stack <Layer>(); // Create a new stack FarMode farMode = FarMode.DirectoryView; st.Push( // pushing all content from dirInfo; new Layer { Content = dir.GetFileSystemInfos(), SelectedIndex = 0 }); while (true) //Cycle works until is true { if (farMode == FarMode.DirectoryView) { st.Peek().Draw(); // paints the first page } ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(); // reading a key switch (consoleKeyInfo.Key) { case ConsoleKey.UpArrow: st.Peek().SelectedIndex--; break; case ConsoleKey.DownArrow: st.Peek().SelectedIndex++; break; case ConsoleKey.Enter: int x = st.Peek().SelectedIndex; FileSystemInfo fileSystemInfo = st.Peek().Content[x]; if (fileSystemInfo.GetType() == typeof(DirectoryInfo)) { DirectoryInfo d = fileSystemInfo as DirectoryInfo; st.Push(new Layer { Content = d.GetFileSystemInfos(), SelectedIndex = 0 }); // if the folder is added to the stack } else { farMode = FarMode.FileView; using (FileStream fs = new FileStream(fileSystemInfo.FullName, FileMode.Open, FileAccess.Read)) { using (StreamReader sr = new StreamReader(fs)) // if the file is read { Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; Console.Clear(); Console.WriteLine(sr.ReadToEnd()); } } } break; case ConsoleKey.Backspace: if (farMode == FarMode.DirectoryView) { st.Pop(); // if u press backspace, stack pops its element } else if (farMode == FarMode.FileView) { farMode = FarMode.DirectoryView; Console.ForegroundColor = ConsoleColor.White; } break; case ConsoleKey.F2: // to change the name of a folder or file Console.BackgroundColor = ConsoleColor.Black; Console.Clear(); string name = Console.ReadLine(); int x2 = st.Peek().SelectedIndex; FileSystemInfo fileSystemInfo2 = st.Peek().Content[x2]; if (fileSystemInfo2.GetType() == typeof(DirectoryInfo)) // if selected item is dir { DirectoryInfo d2 = fileSystemInfo2 as DirectoryInfo; Directory.Move(fileSystemInfo2.FullName, d2.Parent.FullName + "/" + name); st.Peek().Content = d2.Parent.GetFileSystemInfos(); } else { FileInfo fs2 = fileSystemInfo2 as FileInfo; // // if selected item is file File.Move(fileSystemInfo2.FullName, fs2.Directory.FullName + "/" + name); st.Peek().Content = fs2.Directory.GetFileSystemInfos(); } break; case ConsoleKey.Delete: //to delete a file or folder int x3 = st.Peek().SelectedIndex; FileSystemInfo fileSystemInfo3 = st.Peek().Content[x3]; if (fileSystemInfo3.GetType() == typeof(DirectoryInfo)) { DirectoryInfo d3 = fileSystemInfo3 as DirectoryInfo; Directory.Delete(fileSystemInfo3.FullName, true); st.Peek().Content = d3.Parent.GetFileSystemInfos(); } else { FileInfo fs3 = fileSystemInfo3 as FileInfo; File.Delete(fileSystemInfo3.FullName); st.Peek().Content = fs3.Directory.GetFileSystemInfos(); } st.Peek().SelectedIndex--; break; } } }
static void Main(string[] args) { DirectoryInfo root = new DirectoryInfo(@"C:\Users\ASUS\Desktop\PP2\Week3\Path"); //получаем информацию из нужной папки Stack <Layer> history = new Stack <Layer>(); //создаем новый пустой стек типа "слой" FarMode farMode = FarMode.DirectoryView; //фармод работает с enum и сейчас переменная равна 1 history.Push( //добавляем в стек новый слой new Layer { Content = root.GetFileSystemInfos(), //где информация считывается с выбранной директории SelectedItem = 0 //а курсор на 0 - 1 строка }); while (true) //здесь слои рисуются до тех пор { if (farMode == FarMode.DirectoryView) // пока фамод равно 1, то есть мы находимся в папке { history.Peek().Draw(); } ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(); //данная переменная считывает определенные горячие клавиши, введенные пользователем switch (consoleKeyInfo.Key) //позволяет рассматривать несколько вариантов { case ConsoleKey.UpArrow: //стрелка вверх history.Peek().SelectedItem--; //берет из стека слой верхний, меняет номер выбранной строки на 1 меньше и рисует новый слой с миней полосой на новом номере строки break; case ConsoleKey.DownArrow: history.Peek().SelectedItem++; //аналогично но номер строки+1 break; case ConsoleKey.Enter: //вхождение в папку или файл int x = history.Peek().SelectedItem; //узнаем номер выбранной строки FileSystemInfo fileSystemInfo = history.Peek().Content[x]; //по номеру строки узнаем инфу выбранной папки или файла if (fileSystemInfo.GetType() == typeof(DirectoryInfo)) //если это папка { DirectoryInfo d = fileSystemInfo as DirectoryInfo; //используем в дальнейшем только "папковую часть" history.Push(new Layer { Content = d.GetFileSystemInfos(), SelectedItem = 0 }); //создаем новый слой истории, где контент из новоизбранной пользователем папки, а курсор снова на 1 строке } else //если это файл { farMode = FarMode.FileView; //фармод теперь равен 0, значит новый слой не рисуется using (FileStream fs = new FileStream(fileSystemInfo.FullName, FileMode.Open, FileAccess.Read)) { //здесь мы используем файл стрим и стримридер для открытия файла и его чтения) using (StreamReader sr = new StreamReader(fs)) { Console.BackgroundColor = ConsoleColor.White; //фон белый Console.ForegroundColor = ConsoleColor.Black; //шрифт черный Console.Clear(); //всё что было написано до стирается Console.WriteLine(sr.ReadToEnd()); //пишется содержимое стримридера - содержимое файла до конца } } } break; case ConsoleKey.Backspace: // кнопка "назад" if (farMode == FarMode.DirectoryView) //если фармод 1, то есть папка { history.Pop(); //то мы просто убираем верхний слой стека - получаем предыдущий путь } else if (farMode == FarMode.FileView) //а если мы открыли файл { farMode = FarMode.DirectoryView; //присваиваем ему значение папки в которой сейчас находимся - отрисовывается история верхнего слоя Console.ForegroundColor = ConsoleColor.White; //меняем цвет шрифта на белый } break; case ConsoleKey.Delete: //удаление int x2 = history.Peek().SelectedItem; //узнаем номер строки FileSystemInfo fileSystemInfo2 = history.Peek().Content[x2]; //узнаем информацию о файле или папке if (fileSystemInfo2.GetType() == typeof(DirectoryInfo)) //если папка { DirectoryInfo d = fileSystemInfo2 as DirectoryInfo; //далее используем d как информацию о выбранной папке Directory.Delete(fileSystemInfo2.FullName, true); //удаляем папку при значении тру чтобы не было exception history.Peek().Content = d.Parent.GetFileSystemInfos(); //отрисовываем новый слой, в котором измененное состояние родительской папки от d } else //если файл { FileInfo f = fileSystemInfo2 as FileInfo; //рассматриваем fileSystemInfo2 как файл File.Delete(fileSystemInfo2.FullName); //удаляем history.Peek().Content = f.Directory.GetFileSystemInfos(); //отрисовываем слой, папка в которой находится файл обновлена } history.Peek().SelectedItem--; //курсор сдвигается вверх break; case ConsoleKey.Tab: //переименование int x3 = history.Peek().SelectedItem; //номер строки FileSystemInfo fileSystemInfo3 = history.Peek().Content[x3]; //информация о файле или папке string firstname = history.Peek().Content[x3].Name; //новая строка равна имени файла или папки string secondname = Console.ReadLine(); //новая строка равна введенной пользователем if (firstname != secondname) { if (fileSystemInfo3.GetType() == typeof(DirectoryInfo)) //если это папка { DirectoryInfo d = fileSystemInfo3 as DirectoryInfo; //рассматриваем как папку string path1 = Path.GetDirectoryName(d.FullName); //ссылка на путь ДО папки string extension1 = Path.GetExtension(firstname); //узнает расширение выбранной папки string end1 = path1 + '/' + secondname + extension1; //создает новый путь к новоименованной папке Directory.Move(d.FullName, @end1); //перемещает=переименовывает history.Peek().Content = d.Parent.GetFileSystemInfos(); //отрисовывает обновленный вариант } else //если файл { FileInfo f = fileSystemInfo3 as FileInfo; //рассматриваем как файл string path = f.DirectoryName; //создаем строку-ссылку на файл(без имени файла в конце) string extension = Path.GetExtension(firstname); //узнает расширение выбранного файла string end = path + '/' + secondname + extension; //создает путь до новоименнованного файла File.Move(f.FullName, @end); //переименовывание history.Peek().Content = f.Directory.GetFileSystemInfos(); //отрисовывает обновление } } else { } break; case ConsoleKey.Escape: int x4 = history.Peek().SelectedItem;//номер строки FileSystemInfo fileSystemInfo4 = history.Peek().Content[x4]; FileInfo p = fileSystemInfo4 as FileInfo; string sourcefolder = p.Directory.FullName; string targetfolder = @"C:\Users\ASUS\Desktop\PP2\Week3\Path\Папка\Папка 2"; string t = Path.Combine(sourcefolder, p.Name); string k = Path.Combine(targetfolder, p.Name); File.Copy(t, k); break; } } }
static void Main(string[] args) { DirectoryInfo link = new DirectoryInfo(@"C:\Users\Nurayim\Desktop\KBTU"); // ссылка на папку Stack <Layer> history = new Stack <Layer>(); // создаем стэк, где будем хранить список FarMode mode = FarMode.dir; // приравниваем тип папке history.Push(new Layer { FSI = link.GetFileSystemInfos(), // через функцию гетфайлсистеминфос достаем содержание папки Index = 0 // приравниваем индекс нулю, то есть курсор начинается с нулевого элемента }); while (true) // создаем бесконечный цикл { if (mode == FarMode.dir) // если тип равен папке { history.Peek().Draw(); // то вызываем метод } ConsoleKeyInfo consoleKey = Console.ReadKey(); // функция, где хранится информация о клавишах switch (consoleKey.Key) { case ConsoleKey.UpArrow: // если мы нажимаем на этот клавиш, то индекс уменьшается history.Peek().Index--; break; case ConsoleKey.DownArrow: // индекс прибавляется history.Peek().Index++; break; case ConsoleKey.Enter: int x1 = history.Peek().Index; // создаем переменную, которая будет служить в роле индекса FileSystemInfo fileSystemInfo1 = history.Peek().FSI[x1]; if (fileSystemInfo1.GetType() == typeof(DirectoryInfo)) // определяем тип { DirectoryInfo d = fileSystemInfo1 as DirectoryInfo; history.Push(new Layer { FSI = d.GetFileSystemInfos(), Index = 0 }); // если это папка, то открываем папку, достаем новый чписокб и приравниваем индекс нулю } else { mode = FarMode.file; using (FileStream fs = new FileStream(fileSystemInfo1.FullName, FileMode.Open, FileAccess.Read)) // если это файл, то открываем файл и показываем содержание файла { using (StreamReader sr = new StreamReader(fs)) { Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; Console.Clear(); Console.WriteLine(sr.ReadToEnd()); } } } break; case ConsoleKey.Backspace: if (mode == FarMode.dir) // если это папка, то удаляем через поп последнее окно { history.Pop(); } else if (mode == FarMode.file) { mode = FarMode.dir; Console.ForegroundColor = ConsoleColor.White; } break; case ConsoleKey.Delete: int x2 = history.Peek().Index; FileSystemInfo fileSystemInfo2 = history.Peek().FSI[x2]; if (fileSystemInfo2.GetType() == typeof(DirectoryInfo)) // если это папка, то удаляем через булевую функцию тру, то есть соглашаемся удалению содержания папки { DirectoryInfo d = fileSystemInfo2 as DirectoryInfo; Directory.Delete(fileSystemInfo2.FullName, true); history.Peek().FSI = d.Parent.GetFileSystemInfos(); } else { FileInfo f = fileSystemInfo2 as FileInfo; // если это файл, то просто удаляем файл и возвращаем обновленный список File.Delete(fileSystemInfo2.FullName); history.Peek().FSI = f.Directory.GetFileSystemInfos(); } history.Peek().Index--; // при удвлении индекс уменьшается break; case ConsoleKey.F2: Console.BackgroundColor = ConsoleColor.Black; Console.Clear(); string name = Console.ReadLine(); // создаем строкуб где будем писать новое имя int x3 = history.Peek().Index; FileSystemInfo fileSystemInfo3 = history.Peek().FSI[x3]; if (fileSystemInfo3.GetType() == typeof(DirectoryInfo)) // определяем тип { DirectoryInfo directoryInfo = fileSystemInfo3 as DirectoryInfo; Directory.Move(fileSystemInfo3.FullName, directoryInfo.Parent + "/" + name); // если это папка, то меняем имя через функцию парент history.Peek().FSI = directoryInfo.Parent.GetFileSystemInfos(); } else { FileInfo fileInfo = fileSystemInfo3 as FileInfo; File.Move(fileSystemInfo3.FullName, fileInfo.Directory.FullName + "/" + name); // если файл, то через дайректори фулл нэйм history.Peek().FSI = fileInfo.Directory.GetFileSystemInfos(); } break; } } }
static void Main(string[] args) { DirectoryInfo root = new DirectoryInfo(@"D:\test"); Stack <Layer> history = new Stack <Layer>(); FarMode farMode = FarMode.DirectoryView; history.Push( new Layer { Content = root.GetFileSystemInfos(), SelectedItem = 0 }); int a = 0; string gfh = Convert.ToString(root); while (a == 0) { if (farMode == FarMode.DirectoryView) { history.Peek().Draw(); } ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(); switch (consoleKeyInfo.Key) { case ConsoleKey.UpArrow: history.Peek().SelectedItem--; break; case ConsoleKey.DownArrow: history.Peek().SelectedItem++; break; case ConsoleKey.Enter: int x = history.Peek().SelectedItem; FileSystemInfo fileSystemInfo = history.Peek().Content[x]; if (fileSystemInfo.GetType() == typeof(DirectoryInfo)) { DirectoryInfo d = fileSystemInfo as DirectoryInfo; history.Push(new Layer { Content = d.GetFileSystemInfos(), SelectedItem = 0 }); } else { farMode = FarMode.FileView; using (FileStream fs = new FileStream(fileSystemInfo.FullName, FileMode.Open, FileAccess.Read)) { using (StreamReader sr = new StreamReader(fs)) { Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; Console.Clear(); Console.WriteLine(sr.ReadToEnd()); } } } break; case ConsoleKey.Backspace: if (farMode == FarMode.DirectoryView) { history.Pop(); } else if (farMode == FarMode.FileView) { farMode = FarMode.DirectoryView; Console.ForegroundColor = ConsoleColor.White; } break; case ConsoleKey.Delete: int x2 = history.Peek().SelectedItem; FileSystemInfo fileSystemInfo2 = history.Peek().Content[x2]; if (fileSystemInfo2.GetType() == typeof(DirectoryInfo)) { DirectoryInfo d = fileSystemInfo2 as DirectoryInfo; Directory.Delete(fileSystemInfo2.FullName, true); history.Peek().Content = d.Parent.GetFileSystemInfos(); } else { FileInfo f = fileSystemInfo2 as FileInfo; File.Delete(fileSystemInfo2.FullName); history.Peek().Content = f.Directory.GetFileSystemInfos(); } history.Peek().SelectedItem--; break; case ConsoleKey.R: int x3 = history.Peek().SelectedItem; FileSystemInfo fileSystemInfo3 = history.Peek().Content[x3]; //string o = fileSystemInfo3.Name.ToString(); Console.Clear(); string ttt = Console.ReadLine(); if (fileSystemInfo3.GetType() == typeof(DirectoryInfo)) { DirectoryInfo dfd = fileSystemInfo3 as DirectoryInfo; Console.Clear(); try { dfd.MoveTo(Path.Combine(dfd.Parent.FullName, ttt)); history.Peek().Content = dfd.Parent.GetFileSystemInfos(); } catch { Console.Write("this name already exists, try again"); } } else { ttt = ttt + ".txt"; FileInfo ddd = fileSystemInfo3 as FileInfo; try { File.Move(fileSystemInfo3.FullName, fileSystemInfo3.FullName.Replace(fileSystemInfo3.Name, ttt)); } catch { Console.Write("this name already exists, try again"); } history.Peek().Content = ddd.Directory.GetFileSystemInfos(); } break; case ConsoleKey.Escape: a = 1; break; } } }
static void Main(string[] args) { DirectoryInfo root = new DirectoryInfo(@"C:\Users\Akbar\Desktop\test"); Stack <Layer> history = new Stack <Layer>(); FarMode farMode = FarMode.DirectoryView; history.Push( new Layer { Content = root.GetFileSystemInfos(), Selected = 0 } ); while (true) { if (farMode == FarMode.DirectoryView) { history.Peek().Draw(); } ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(); switch (consoleKeyInfo.Key) { case ConsoleKey.UpArrow: history.Peek().Selected--; break; case ConsoleKey.DownArrow: history.Peek().Selected++; break; case ConsoleKey.Enter: int i = history.Peek().Selected; FileSystemInfo fileSystemInfo = history.Peek().Content[i]; if (fileSystemInfo.GetType() == typeof(DirectoryInfo)) { history.Push( new Layer { Content = (fileSystemInfo as DirectoryInfo).GetFileSystemInfos(), Selected = 0 } ); } else { farMode = FarMode.FileView; using (FileStream fs = new FileStream(fileSystemInfo.FullName, FileMode.Open, FileAccess.Read)) { using (StreamReader sr = new StreamReader(fs)) { Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; Console.Clear(); Console.WriteLine(sr.ReadToEnd()); } } } break; case ConsoleKey.Backspace: if (farMode == FarMode.DirectoryView) { history.Pop(); } else { farMode = FarMode.DirectoryView; Console.ForegroundColor = ConsoleColor.White; } break; case ConsoleKey.Delete: int j = history.Peek().Selected; FileSystemInfo fsi = history.Peek().Content[j]; if (fsi.GetType() == typeof(DirectoryInfo)) { Directory.Delete(fsi.FullName, true); history.Peek().Content = (fsi as DirectoryInfo).Parent.GetFileSystemInfos(); } else { File.Delete(fsi.FullName); history.Peek().Content = (fsi as FileInfo).Directory.GetFileSystemInfos(); } break; case ConsoleKey.F9: int x = history.Peek().Selected; FileSystemInfo fsi2 = history.Peek().Content[x]; Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; Console.Clear(); string rename = Console.ReadLine(); if (fsi2.GetType() == typeof(DirectoryInfo)) { string pathOfDir = (fsi2 as DirectoryInfo).Parent.FullName; string repath = Path.Combine(pathOfDir, rename); Directory.Move(fsi2.FullName, repath); history.Peek().Content = (fsi2 as DirectoryInfo).Parent.GetFileSystemInfos(); } else { rename = rename + ".txt"; string pathOfFile = (fsi2 as FileInfo).Directory.FullName; string repath1 = Path.Combine(pathOfFile, rename); File.Move(fsi2.FullName, repath1); history.Peek().Content = (fsi2 as FileInfo).Directory.GetFileSystemInfos(); } break; } } }
public void Process(ConsoleKeyInfo pressed) { switch (pressed.Key) { case ConsoleKey.UpArrow: //ind up if (mode == FarMode.Explorer) { Shift(-1); DrawStatus(); ShiftCursor(); } break; case ConsoleKey.DownArrow: //ind down if (mode == FarMode.Explorer) { Shift(1); DrawStatus(); ShiftCursor(); } break; case ConsoleKey.Enter: if (mode == FarMode.Explorer) { try { if (current.items[current.ind].GetType() == typeof(DirectoryInfo)) //open directory { mode = FarMode.Explorer; History.Push(current); current = new Layer(current.GetSelectedItemInfo(), 0); Draw(); } else //open file { mode = FarMode.FileReader; Draw(); } } catch (Exception e) { current = History.Pop(); Draw(); } } break; case ConsoleKey.Backspace: if (mode == FarMode.Explorer) { current = History.Pop(); Draw(); //back to directory } else { mode = FarMode.Explorer; Draw(); } //back to directory from file break; case ConsoleKey.R: mode = FarMode.Rename; Draw(); break; } }
static void Main(string[] args) { DirectoryInfo root = new DirectoryInfo(@"D:\WEEK2"); //Присваиваю путь Stack <Layer> history = new Stack <Layer>(); FarMode farMode = FarMode.DirectoryView; history.Push( new Layer { Content = root.GetFileSystemInfos(), // Делаю экземпляр в котором аргумент Content and FarMode SelectedItem = 0 }); while (true) { if (farMode == FarMode.DirectoryView) { history.Peek().Draw(); // Вызываю функцию } ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(); switch (consoleKeyInfo.Key) { case ConsoleKey.F2: Console.BackgroundColor = ConsoleColor.Black; Console.Clear(); string name = Console.ReadLine(); int x3 = history.Peek().SelectedItem; FileSystemInfo fileSystemInfo3 = history.Peek().Content[x3]; if (fileSystemInfo3.GetType() == typeof(DirectoryInfo)) { DirectoryInfo directoryInfo = fileSystemInfo3 as DirectoryInfo; Directory.Move(fileSystemInfo3.FullName, directoryInfo.Parent + "/" + name); history.Peek().Content = directoryInfo.Parent.GetFileSystemInfos(); } else { FileInfo fileInfo = fileSystemInfo3 as FileInfo; File.Move(fileSystemInfo3.FullName, fileInfo.Directory.FullName + "/" + name); history.Peek().Content = fileInfo.Directory.GetFileSystemInfos(); } break; case ConsoleKey.Delete: int x2 = history.Peek().SelectedItem; FileSystemInfo fileSystemInfo2 = history.Peek().Content[x2]; history.Peek().SelectedItem--; if (fileSystemInfo2.GetType() == typeof(DirectoryInfo)) { DirectoryInfo directoryInfo = fileSystemInfo2 as DirectoryInfo; Directory.Delete(fileSystemInfo2.FullName, true); history.Peek().Content = directoryInfo.Parent.GetFileSystemInfos(); } else { FileInfo fileInfo = fileSystemInfo2 as FileInfo; File.Delete(fileSystemInfo2.FullName); history.Peek().Content = fileInfo.Directory.GetFileSystemInfos(); } // Результаты нажатых кнопок break; case ConsoleKey.UpArrow: history.Peek().SelectedItem--; break; case ConsoleKey.DownArrow: history.Peek().SelectedItem++; break; case ConsoleKey.Enter: int x = history.Peek().SelectedItem; FileSystemInfo fileSystemInfo = history.Peek().Content[x]; if (fileSystemInfo.GetType() == typeof(DirectoryInfo)) { DirectoryInfo d = fileSystemInfo as DirectoryInfo; // Если это папка, показываю содержимое history.Push(new Layer { Content = d.GetFileSystemInfos(), SelectedItem = 0 }); } else { farMode = FarMode.FileView; using (FileStream fs = new FileStream(fileSystemInfo.FullName, FileMode.Open, FileAccess.Read)) { using (StreamReader sr = new StreamReader(fs)) { Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; // если это файл также показываю содержимое Console.Clear(); Console.WriteLine(sr.ReadToEnd()); } } } break; case ConsoleKey.Backspace: if (farMode == FarMode.DirectoryView) { history.Pop(); } else if (farMode == FarMode.FileView) { farMode = FarMode.DirectoryView; Console.ForegroundColor = ConsoleColor.White; } break; } } }
static void Main(string[] args) { /* Title - заголовок консоли * history - стэк вложенных папок * mode - текущее состояние системы * root - путь к начальной папке */ Console.Title = "Far Manager"; Stack <Layer> history = new Stack <Layer>(); FarMode mode = FarMode.DIR; DirectoryInfo root = new DirectoryInfo(@"D:\"); bool run = true; //в history засовываем папку root. history.Push( new Layer { Directories = root.GetDirectories().ToList(), Files = root.GetFiles().ToList(), SelectedItem = 0 }); //цикл программы while (run) { //автоматически обновлять интерфейс после каждого нажатия клавиши if (mode == FarMode.DIR) { history.Peek().Draw(); } //ввод клавиши с клавиатуры и дальнейшие действия с ними ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(); switch (consoleKeyInfo.Key) { //на delete удалить файл case ConsoleKey.Delete: history.Peek().DeleteSelectedItem(); break; //на вверх листать папки наверх case ConsoleKey.UpArrow: history.Peek().SelectedItem--; break; //на вниз - листать вниз case ConsoleKey.DownArrow: history.Peek().SelectedItem++; break; //на backspace - вернуться в прошлую папку, или закрыть файл case ConsoleKey.Backspace: if (history.Count == 1) { break; } if (mode == FarMode.DIR) { history.Pop(); } else { mode = FarMode.DIR; Console.ForegroundColor = ConsoleColor.White; } break; //на enter - открыть папку или файл case ConsoleKey.Enter: int x = history.Peek().SelectedItem; if (x < history.Peek().Directories.Count) { DirectoryInfo fileSystemInfo = history.Peek().Directories[x]; DirectoryInfo directoryInfo = fileSystemInfo as DirectoryInfo; history.Push( new Layer { Directories = directoryInfo.GetDirectories().ToList(), Files = directoryInfo.GetFiles().ToList(), SelectedItem = 0 }); } else { mode = FarMode.FILE; FileInfo fileInfo = history.Peek().Files[x - history.Peek().Directories.Count]; Console.BackgroundColor = ConsoleColor.White; Console.Clear(); Console.ForegroundColor = ConsoleColor.Black; using (StreamReader sr = new StreamReader(fileInfo.FullName)) { Console.WriteLine(sr.ReadToEnd()); } } break; //на escape завершить выполнение программы case ConsoleKey.Escape: run = false; break; //на R переименовать файл или папку case ConsoleKey.R: string parentpath; Console.BackgroundColor = ConsoleColor.Black; int a = history.Peek().SelectedItem; Console.Clear(); Console.Write("Введите новое имя файла: "); string txt = Console.ReadLine(); if (a < history.Peek().Directories.Count) { parentpath = history.Peek().Directories[a].Parent.FullName; if (txt != history.Peek().Directories[a].Name) { Directory.Move(history.Peek().Directories[a].FullName, Path.Combine(parentpath, txt)); DirectoryInfo df = new DirectoryInfo(parentpath); history.Peek().Directories = df.EnumerateDirectories().ToList(); } } else { parentpath = history.Peek().Files[a - history.Peek().Directories.Count].FullName.Remove(history.Peek().Files[a - history.Peek().Directories.Count].FullName.Length - history.Peek().Files[a - history.Peek().Directories.Count].Name.Length); if (txt != history.Peek().Files[a - history.Peek().Directories.Count].Name) { File.Copy(history.Peek().Files[a - history.Peek().Directories.Count].FullName, Path.Combine(parentpath, txt)); File.Delete(history.Peek().Files[a - history.Peek().Directories.Count].FullName); DirectoryInfo df = new DirectoryInfo(parentpath); history.Peek().Files = df.EnumerateFiles().ToList(); } } break; } } }