Главная страница

Файловый менеджер на базовом функционале C#. Курсовая файловый менеджер C Sharp. Программа Файловый менеджер от Программа файловый менеджер написана в качестве контрольного задания при прохождении курса Разработчик C# ## Оглавление Задание(#Задание)


Скачать 21.35 Kb.
НазваниеПрограмма Файловый менеджер от Программа файловый менеджер написана в качестве контрольного задания при прохождении курса Разработчик C# ## Оглавление Задание(#Задание)
АнкорФайловый менеджер на базовом функционале C
Дата14.06.2022
Размер21.35 Kb.
Формат файлаdocx
Имя файлаКурсовая файловый менеджер C Sharp.docx
ТипПрограмма
#590587

# Программа Файловый менеджер от

Программа файловый менеджер написана в качестве контрольного задания при прохождении курса Разработчик C#
## Оглавление

0. [Задание](#Задание)

1. [Требования](#Требования)

2. [Описание функций программы](#Описание-функций-программы)

3. [Общие характеристики программы](#Общие-характеристики-программы)
## Задание

Требуется создать консольный файловый менеджер начального уровня, который

покрывает минимальный набор функционала по работе с файлами.

Функции и требования

1. Просмотр файловой структуры

2. Поддержка копирование файлов, каталогов

3. Поддержка удаление файлов, каталогов

4. Получение информации о размерах, системных атрибутов файла, каталога

5. Вывод файловой структуры должен быть постраничным

6. В конфигурационном файле должна быть настройка вывода количества

элементов на страницу

7. При выходе должно сохраняться, последнее состояние

8. Должны быть комментарии в коде

9. Должна быть документация к проекту в формате md

10. Приложение должно обрабатывать непредвиденные ситуации (не падать)

11. При успешном выполнение предыдущих пунктов – реализовать сохранение ошибки

в текстовом файле в каталоге errors/random_name_exception.txt

12. При успешном выполнение предыдущих пунктов – реализовать движение по

истории команд (стрелочки вверх, вниз)
## Требования
Функции менеджера

+ Вывод дерева файловой системы с условием “пейджинга” - только два уровня!

+ Копирование каталога

+ Копирование файла

+ Удаление каталога рекурсивно

+ Удаление файла

+ Вывод информации о каталоге

+ Вывод информации о файле

## Описание функций программы
Программа файловый менеджер написана на языке C#.

Основные команды:

+ 1 - Переход в категорию: vd (выбранная папка) ? (выбранная страница папок)

+ Примечание: вывод производиться по n категорий сохранённых в - Properties.Settings.Default.SavedSizePageCategory.

+ Примечание 2: если указана несущесвующая категория возвращает в C:\\.

+ Примечание 3: если указана несущесвующая страница возвращает первую страницу.

+ Пример: vd C:\\Docs ? 1

+ 2 - Отобразить страницу с файлами в текущей категории: vf (выбранная страница файлов)

+ Примечание 1: вывод производиться по n категорий сохранённых в - Properties.Settings.Default.SavedSizePageFiles.

+ Примечание 2: если указана несущесвующая страница возвращает - 0.

+ Пример: vf 2

+ 3 - Копирование папки: cd (выбранная папка) (скопированная папка)

+ Пример: cd C:\\Directory ? F:\\DirectoryCopy

+ 4 - Копирование файла: cf (выбранный файл) (скопированный файл)

+ Пример: cf C:\\Doc.txt ? F:\\DocCopy.txt"

+ 5 - Удаление каталога: rm (выбранная папка)

+ Пример: rm F:\\DirectoryCopy

+ 6 - Удаление файла: rm (выбранный файл)

+ Пример: rm F:\\DocCopy.txt

+ 7 - Для выхода из приложения введите - ex
## Общие характеристики программы

Программа запускается в консоли и имеет вид:

![Вид консольного приложения](https://github.com/Safroniv/JobLesson09v02/blob/JobLesson09Part01v02/JobLesson09Part01v02/scr/proInWork.png )

Программа сохраняет последние действия и при следующем запуске запускается последнее сохранённое состояние.

Все параметры сохраняются в Propertice:

![меню Propertice](https://github.com/Safroniv/JobLesson09v02/blob/JobLesson09Part01v02/JobLesson09Part01v02/scr/Porperties.png )

Все команды отображаются после меню вывода на страницу менеджера и инструкции.

![командная строка](https://github.com/Safroniv/JobLesson09v02/blob/JobLesson09Part01v02/JobLesson09Part01v02/scr/CommandLineinFileManeger.png)

using System;

using System.IO;
namespace JobLesson09Part01v02

{

internal class Program

{

static void Main()

{

//Основной медот который определяет есть ли сохранённые данные Properties

while (true)

{

TreeOfCategory(Properties.Settings.Default.SavedAddress);

UserInformation();

StructureOfCommand();

}

}

public static string[] CommandParser(params string[] massiveCommands)

{

//Парсер строки введенной пользователем

string stringParser = Console.ReadLine();

bool keyIndex = true;

for (int i = 0; i < stringParser.Length; i++)

{

if (i < 2)

{ massiveCommands[0] += stringParser[i]; }

if (stringParser[i] == ' ' && stringParser[i + 1] == '?')

{ keyIndex = !keyIndex; i += 3; }

if (i > 2 && keyIndex)

{ massiveCommands[1] += stringParser[i]; }

if (i > 2 && !keyIndex)

{ massiveCommands[2] += stringParser[i]; }

}

return massiveCommands;

}

static void StructureOfCommand()

{

//метод отвечающий за функционал файлового менеджера

string command = "";

string address = "";

string addressCreate = "";

string[] commands = CommandParser(command, address, addressCreate);

command = commands[0];

address = commands[1];

addressCreate = commands[2];

//переключатель команд

switch (command)

{

case "vd": { CommandDirAddress(address, addressCreate); } break;

case "vf": { CommandFilesOfDIrView(address); } break;

case "cd": { CopyDirs(address, addressCreate); } break;

case "cf": { CopyFiles(address, addressCreate); } break;

case "rm": { Delete(address); } break;

case "ex": { Environment.Exit(0); } break;

default: { Console.WriteLine("Введена неверная команда"); } break;

}

}

static string TreeOfCategory(string structDirName)

{

//1. Просмотр файловой структуры. Отображает дерево категорий и дерево файлов

Console.Clear();

try { string[] dirs = Directory.GetDirectories(structDirName); }

catch (Exception ex)

{

Console.WriteLine("Ошибочная команда! Введите еще раз.");

if (Directory.Exists(@"C:\errors"))

{ File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n"); }

else

{

Directory.CreateDirectory(@"C:\errors");

File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n");

}

structDirName = $@"C:\";

ConsoleColor current = Console.BackgroundColor;

Console.BackgroundColor = ConsoleColor.DarkRed;

Console.WriteLine($"Неверно введен адрес каталога. Введите команду еще раз");

Console.BackgroundColor = current;

}

finally

{

if (Properties.Settings.Default.SavedNumPageCat < 0 || Properties.Settings.Default.SavedNumPageCat > 5)

{

Console.WriteLine("Указан некорректный номер страницы. Принято значение по умолчанию =0.");

Properties.Settings.Default.SavedNumPageCat = 0;

Properties.Settings.Default.Save();

}

DirectoryInfo dirInfo = new DirectoryInfo(structDirName);

string[] dirs = Directory.GetDirectories(structDirName);

Console.WriteLine(

"╔═════════════════════════════════════════════════════════════════════════" + "\n" +

"║Структура категорий:" + "\n" +

"║" + dirInfo.FullName);
if (Directory.Exists(structDirName))

{

int indexViewPage = Properties.Settings.Default.SavedNumPageCat;

int numElementsPage = Properties.Settings.Default.SavedSizePageCategory;

int FirstElementView = indexViewPage * numElementsPage;

int LastElementView = FirstElementView + numElementsPage;

for (int i = FirstElementView; i < LastElementView; i++)

{

if (dirs.Length <= i) { break; }

DirectoryInfo dirsInfo = new DirectoryInfo(dirs[i]);

Console.WriteLine(

"║├" + dirsInfo.Name + " │ " + dirsInfo.Exists + " │ " + dirsInfo.Attributes + " │ " + dirsInfo.CreationTime + " │ ");

}

}

Console.WriteLine(

"╚══════════════════════════════════════════════════════════════════════════" + "\n" +

"Файлы категории:" + dirInfo.FullName + "\n" +

"╔════════════════════╦═══════════╦═══════════════════╦═══════════════════╗" + "\n" +

"║ Имя файла: ║Расширение:║Размер файла: ║Дата изменения: ║" + "\n" +

"╠════════════════════╬═══════════╬═══════════════════╬═══════════════════╣");

if (Directory.Exists(structDirName))

{

int indexViewFiles = Properties.Settings.Default.SavedNumPageFiles;

int numElementsPage = Properties.Settings.Default.SavedSizePageFiles;

int FirstElementView = indexViewFiles * numElementsPage;

int LastElementView = FirstElementView + numElementsPage;

string[] files = Directory.GetFiles(structDirName);
for (int i = FirstElementView; i < LastElementView; i++)

{

if (files.Length <= i)

{

break;

}

FileInfo filesInfo = new FileInfo(files[i]);

string filesInfoNameResize = filesInfo.Name.Remove(filesInfo.Name.LastIndexOf('.')).PadRight(40, ' ').Substring(0, 19);

string fileExtensionResize = filesInfo.Extension.PadRight(20, ' ').Substring(0, 11);

string fileSizeResize = Convert.ToString(filesInfo.Length).PadRight(20, ' ').Substring(0, 13);

string fileLastWriteTimeResize = Convert.ToString(filesInfo.LastWriteTime).PadRight(20, ' ').Substring(0, 19);

Console.WriteLine(

"║├" + filesInfoNameResize + "║" + fileExtensionResize + "║" + fileSizeResize + " bytes" + "║" + fileLastWriteTimeResize + "║");

}

}

Console.WriteLine(

"╚════════════════════╩═══════════╩═══════════════════╩═══════════════════╝");

}

return structDirName;

}

public static void UserInformation()

{

//Метод с описанием функций файлового менеджера.

Console.WriteLine(

"Команды строки:" + "\n" +

"1 - Переход в категорию: d (выбранная папка) -p (выбранная страница папок)" + "\n" +

$"Примечание: вывод производиться по {Properties.Settings.Default.SavedSizePageCategory} категорий." + "\n" +

"Примечание 2: если указана несущесвующая категория возвращает в C:\\." + "\n" +

"Примечание 3: если указана несущесвующая страница возвращает первую страницу." + "\n" +

"Пример: vd C:\\Docs ? 1" + "\n" +

"2 - Отобразить страницу с файлами в текущей категории: df (выбранная страница файлов)" + "\n" +

$"Примечание: вывод производиться по {Properties.Settings.Default.SavedSizePageFiles} категорий)." + "\n" +

$"Примечание 2: если указана несущесвующая страница возвращает - 0." + "\n" +

"Пример: vf 2" + "\n" +

"3 - Копирование папки: cd (выбранная папка) (скопированная папка)" + "\n" +

"Пример: cd C:\\Directory ? F:\\DirectoryCopy" + "\n" +

"4 - Копирование файла: cf (выбранный файл) (скопированный файл)" + "\n" +

"Пример: cf C:\\Doc.txt ? F:\\DocCopy.txt" + "\n" +

"5 - Удаление каталога: rmd (выбранная папка)" + "\n" +

"Пример: rm F:\\DirectoryCopy" + "\n" +

"6 - Удаление файла: rmf (выбранный файл)" + "\n" +

"Пример: rm F:\\DocCopy.txt" + "\n" +

"7 - Для выхода из приложения введите - ex" + "\n" +

"╔════════════════════════════════════════════════════════════════════════╗" + "\n" +

"║Введите команду: ║" + "\n" +

"╚════════════════════════════════════════════════════════════════════════╝");

}
public static void CommandDirAddress(string address, string pagecat)

{

//Запрос адреса, сохранение адреса в свойства пользователя с последующим выводом страницы категории с условием пейджинга

string parseAddress = @"C:\";

int dirsAddress = 0;
try { parseAddress = address; }

catch (Exception ex)

{

Console.WriteLine("Ошибочная команда! Введите еще раз.");

if (Directory.Exists(@"C:\errors"))

{ File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n"); }

else

{

Directory.CreateDirectory(@"C:\errors");

File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n");

}

}

finally

{

if (Directory.Exists(parseAddress) == true)

{

Properties.Settings.Default.SavedAddress = parseAddress;

Properties.Settings.Default.Save();

}

else

{

parseAddress = @"C:\";

Properties.Settings.Default.SavedAddress = parseAddress;

Properties.Settings.Default.Save();

}

}

//Запрос страницы вывода категорий (пейджинг) и сохранение страницы вывода в свойства пользователя.

try { dirsAddress = Int32.Parse(pagecat); }

catch (Exception ex)

{

Console.WriteLine("Ошибочная команда! Введите еще раз.");

if (Directory.Exists(@"C:\errors"))

{ File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n"); }

else

{

Directory.CreateDirectory(@"C:\errors");

File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n");

}

}

finally

{

if (dirsAddress <= 0 || dirsAddress > (Directory.GetFiles(Properties.Settings.Default.SavedAddress).Length / Properties.Settings.Default.SavedSizePageFiles + 1)) { dirsAddress = 0; }

Properties.Settings.Default.SavedNumPageCat = dirsAddress;

Properties.Settings.Default.Save();

}

}

public static void CommandFilesOfDIrView(string address)

{

//Запрос страницы вывода файлов (пейджинг) и сохранение страницы вывода в свойства пользователя.

int filesAddress = 0;
try { filesAddress = Int32.Parse(address); }

catch (Exception ex)

{

Console.WriteLine("Ошибочная команда! Введите еще раз.");

if (Directory.Exists(@"C:\errors"))

{ File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n"); }

else

{

Directory.CreateDirectory(@"C:\errors");

File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n");

}

}

finally

{

if (filesAddress <= 0 || filesAddress > (Directory.GetFiles(Properties.Settings.Default.SavedAddress).Length / Properties.Settings.Default.SavedSizePageFiles + 1)) { filesAddress = 0; }

Properties.Settings.Default.SavedNumPageFiles = filesAddress;

Properties.Settings.Default.Save();

}

}

public static void CopyDirs(string address, string addressCreate)

{

//Запрос копируемой директории и расположения копирования.

if (Directory.Exists($@"{address}"))

{

if (Directory.Exists($@"{addressCreate}")) { CopyDirsAndFiles(address, addressCreate); }

else

{

Directory.CreateDirectory($@"{addressCreate}");

CopyDirsAndFiles(address, addressCreate);

}

}

else { Console.WriteLine("Указана не существующая исходная категория для копирования"); }

}

public static void CopyDirsAndFiles(string address, string addressCreate)

{

//копирование файлов и директорий

//Создаётся структура папок исходного каталога

foreach (string dirPath in Directory.GetDirectories($@"{address}", "*", SearchOption.AllDirectories))

{

try { Directory.CreateDirectory(dirPath.Replace($@"{address}", $@"{addressCreate}")); }

catch (Exception ex)

{

Console.WriteLine("Ошибочная команда! Введите еще раз.");

if (Directory.Exists(@"C:\errors"))

{ File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n"); }

else

{

Directory.CreateDirectory(@"C:\errors");

File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n");

}

}

}

//Копирование содержимого

foreach (string newPath in Directory.GetFiles($@"{address}", "*.*", SearchOption.AllDirectories))

{

try { File.Copy(newPath, newPath.Replace($@"{address}", $@"{addressCreate}"), true); }

catch (Exception ex)

{

Console.WriteLine("Ошибочная команда! Введите еще раз.");

if (Directory.Exists(@"C:\errors"))

{ File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n"); }

else

{

Directory.CreateDirectory(@"C:\errors");

File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n");

}

}

}

}

public static void CopyFiles(string address, string addressCreate)

{

//копирование отдельных файлов

try { File.Copy($@"{address}", $@"{address}".Replace($@"{address}", $@"{addressCreate}"), true); }

catch (Exception ex)

{

Console.WriteLine("Ошибочная команда! Введите еще раз.");

if (Directory.Exists(@"C:\errors"))

{ File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n"); }

else

{

Directory.CreateDirectory(@"C:\errors");

File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n");

}

}

}

public static void Delete(string address)

{

//удаление файлов и категорий

if (Directory.Exists(address))

{

try

{

Directory.Delete(address, true);

bool directoryExists = Directory.Exists(address);

}

catch (Exception ex)

{

Console.WriteLine("Ошибочная команда! Введите еще раз.");

if (Directory.Exists(@"C:\errors"))

{ File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n"); }

else

{

Directory.CreateDirectory(@"C:\errors");

File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n");

}

}

}

//удаление файлов

if (File.Exists(address))

{

try { File.Delete($@"{address}"); }

catch (Exception ex)

{

Console.WriteLine("Ошибочная команда! Введите еще раз.");

if (Directory.Exists(@"C:\errors"))

{ File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n"); }

else

{

Directory.CreateDirectory(@"C:\errors");

File.AppendAllText(@"C:\errors\random_name_exception.txt", $"{DateTime.Now} {ex.Message}\n");

}

}

}

}

}

}


написать администратору сайта