static void Delete(string path) { FileInfo file; DirectoryInfo directories; try { FileAttributes attr = File.GetAttributes(path); if (attr.HasFlag(FileAttributes.Directory)) { directories = new DirectoryInfo(path); foreach (DirectoryInfo dir in directories.GetDirectories()) { ConsoleDrawings.PrintInformation($"Удаляем {dir.Name}"); dir.Delete(true); } if (directories.FullName == CurrentPath) { CurrentPath = directories.Parent.FullName;//присваиваем, чтобы сработала процедура, которая обновит список ConsoleDrawings.PrintFoldersTree(CurrentPath, CurrentFoldersFiles, 1); } directories.Delete(true); } else { file = new FileInfo(path); file.Delete(); if (file.Directory.FullName == CurrentPath) { CurrentPath = file.Directory.FullName;//присваиваем, чтобы сработала процедура, которая обновит список ConsoleDrawings.PrintFoldersTree(CurrentPath, CurrentFoldersFiles, 1); } } ConsoleDrawings.PrintInformation("Удаление завершено"); } catch (Exception e) { ConsoleDrawings.PrintError(e.Message); return; } }
static void Main(string[] args) { //фиксируем размеры окна, чтобы нельзя было его изменить WindowUtility.FixeConsoleWindow(Configuration.ConsoleHeight, Configuration.ConsoleWidth); //рисуем рамку для основной панели с папками/файлами ConsoleDrawings.PrintFrameLines(0, 0, Console.WindowWidth, Configuration.MainPanelHeight); ConsoleDrawings.PrintFrameLines(0, Configuration.MainPanelHeight, Console.WindowWidth, Configuration.InfoPanelHeight); //считывание сохраненного пути с последнего сеанса работы if (File.Exists("last.state")) { using (StreamReader sr = new StreamReader("last.state")) //File.OpenText(inputFile)) { string strState = ""; try { strState = sr.ReadLine(); } catch (Exception) { CurrentPath = "C:\\"; } CurrentPath = strState; } } else { CurrentPath = "C:\\"; } ConsoleDrawings.PrintFoldersTree(CurrentPath, CurrentFoldersFiles, 1); //справка: ConsoleDrawings.PrintInformation("help - список всех поддерживаемых комманд"); bool exit = false; List <string> arguments = new List <string>(); while (!exit) { ConsoleDrawings.TakeNewCommand(); currentCommand = Console.ReadLine(); ConsoleDrawings.ClearMessageLine(); arguments.Clear();//по завершении обработки команды очищаем список аргументов, чтобы корректно обработать следующую команду arguments.AddRange(currentCommand.Split(' ')); string theCommand = arguments[0]; arguments.Remove(theCommand); switch (theCommand.ToLower().Trim()) { case "exit": SaveLastState(); exit = true; break; case "ls": LSCommand(arguments); break; case "cp": CPCommand(arguments); break; case "rm": RMCommand(arguments); break; case "file": FILECommand(arguments); break; case "help": ConsoleDrawings.PrintInformation("Поддерживаемые команды: exit; ls; cp; rm; file. Введите команду с ключом /? чтобы получить подробное описание"); break; case "": arguments.Clear(); break; default: ConsoleDrawings.PrintWarning($"Невозможно обработать команду {theCommand}"); arguments.Clear(); break; } } }
static void LSCommand(List <string> arguments) { int pageNum; if (arguments.Count == 0) { ConsoleDrawings.PrintError("Неверные параметры..."); return; } else if (arguments.Count == 1) { if (arguments[0] == "/?") { ConsoleDrawings.PrintInformation("ls <путь> <номер страницы> - команда выводит дерево указанного каталога с указанным номером страницы"); } else if (arguments[0] == "..") { DirectoryInfo parentDirectory = Directory.GetParent(CurrentPath); if (parentDirectory == null) { ConsoleDrawings.PrintWarning("Не существует родительской директории для указанного каталога"); } else { CurrentPath = parentDirectory.FullName; ConsoleDrawings.PrintFoldersTree(CurrentPath, CurrentFoldersFiles, 1); } } else //if(Directory.Exists(arguments[0]))//если не указан номер страницы, выводим первую { CurrentPath = arguments[0]; ConsoleDrawings.PrintFoldersTree(CurrentPath, CurrentFoldersFiles, 1); } } else if (arguments.Count == 2) //если два аргумента в команде, значит можно реализовать команду { CurrentPath = arguments[0]; //первый аргумент должен быть путь try { pageNum = Convert.ToInt32(arguments[1]); } catch (FormatException) { pageNum = 1; ConsoleDrawings.PrintWarning("Некорректный аргумент <номер страницы> - выводим 1ю страницу..."); } if (pageNum == 0) { pageNum = 1; } ConsoleDrawings.PrintFoldersTree(CurrentPath, CurrentFoldersFiles, pageNum); } else//если аргументов более 2х, возможно путь разделен пробелами { //пытаемся собрать путь, предположив, что он разделен пробелами string resPath = ""; for (int i = 0; i < arguments.Count - 1; i++) { resPath += arguments[i]; resPath += " "; } resPath = resPath.Trim(); try { pageNum = Convert.ToInt32(arguments[arguments.Count - 1]); } catch (FormatException) { resPath += " "; resPath += arguments[arguments.Count - 1]; pageNum = 1; } CurrentPath = resPath; ConsoleDrawings.PrintFoldersTree(CurrentPath, CurrentFoldersFiles, pageNum); //ConsoleDrawings.PrintError("Невозможно распознать команду, - аргументов более 2х"); } }