Консольный файловый менеджер на C#/.NET. Приложение подключается к локальной файловой системе, позволяет перемещаться по каталогам, выводить дерево директорий, читать файлы и выполнять базовые операции через текстовые команды.
Проект сделан с акцентом на ООП, SOLID и расширяемую архитектуру: логика команд отделена от консольного интерфейса, а работа с файловой системой вынесена за абстракцию.
- подключение и отключение от файловой системы;
- переход по каталогам через относительные и абсолютные пути;
- поддержка
.и..; - вывод дерева каталогов с заданной глубиной;
- просмотр содержимого файла;
- копирование, перемещение, удаление и переименование файлов;
- обработка некорректных команд и ошибок выполнения;
- интерактивный консольный режим.
connect C:\Users\User\Documents -m local
tree list -d 2
tree goto projects
tree goto ..
file show notes.txt -m console
file copy notes.txt backup
file move notes.txt archive
file rename notes.txt README.txt
file delete README.txt
disconnect
q
q завершает работу приложения.
- C# / .NET 9
- xUnit
- стандартная библиотека .NET
В основной логике не используются сторонние библиотеки.
src/
├── FileManager.Core/
└── FileManager.Presentation/
tests/
└── FileManager.Tests/
FileManager.Core— команды, состояние приложения, абстракция файловой системы, результаты выполнения и построение дерева.FileManager.Presentation— консольный цикл и парсинг пользовательских команд.FileManager.Tests— тесты парсера команд.
Основная идея проекта — отделить бизнес-логику от консольного ввода/вывода.
Core не зависит от консоли и конкретного способа ввода команд. Команды работают через общие контракты, а доступ к файловой системе идёт через IFileSystem. Сейчас реализована локальная файловая система, но сама логика команд не привязана напрямую к System.IO.
Парсер команд построен как цепочка обработчиков. Это позволяет добавлять новые команды, аргументы и флаги без превращения парсинга в один большой switch.
В проекте используются идеи и паттерны:
- Command — отдельный объект под каждое действие пользователя;
- Chain of Responsibility — разбор команд, аргументов и флагов;
- Builder — сборка команд из параметров;
- State — разные правила поведения для подключённого и отключённого состояния;
- Composite / Visitor — построение и обход дерева файловой системы;
- Dependency Inversion — команды зависят от абстракций, а не от конкретной консоли или файловой системы.
git clone <repository-url>
cd <repository-folder>
dotnet restore
dotnet build
dotnet testЗапуск приложения:
dotnet run --project src/FileManager.Presentation/FileManager.Presentation.csprojТестами покрыт парсер команд: проверяется, что корректный ввод создаёт команду нужного типа, а неполные или лишние аргументы приводят к ошибке парсинга.
Проверяются сценарии для:
connectиdisconnect;tree gotoиtree list;file show,file copy,file move,file delete,file rename;- ошибок при пропущенных параметрах и лишних токенах.