среда, 1 июля 2026 г.

Giga, CopyFile, CopyFiles, CopyfileSln.slnx

Giga, CopyFile, CopyFiles, CopyfileSln.slnx


D:\Projects\VS02\2606\Utils\Giga\CopyfileSln\CopyfileSln.slnx
D:\Projects\VS02\2606\Utils\Giga\CopyfileSln\CA_Copyfile\CA_Copyfile.csproj

Эта программа на языке C# представляет собой консольное приложение, предназначенное для автоматического сбора содержимого определенных файлов из текущей папки и всех её вложенных подкаталогов в один итоговый текстовый файл. По сути, это инструмент для создания единого отчета или дампа исходного кода проекта.

Ниже приведено подробное описание того, как работает этот код:

1. Точка входа (метод Main)

  • Определение рабочей области: Программа получает путь к текущему рабочему каталогу (Directory.GetCurrentDirectory()), то есть той папке, из которой был запущен исполняемый файл .exe.
  • Генерация имени выходного файла: Имя результирующего файла создается динамически. Оно совпадает с названием текущего каталога, а расширение устанавливается как .txt. Например, если программа запущена из папки C:\MyProject, результат будет сохранен в файл C:\MyProject\MyProject.txt.
  • Обработка ошибок: Весь основной блок обернут в конструкцию try-catch. Если при создании директорий или записи файла произойдет критическая ошибка (например, отсутствие прав доступа), она не приведет к аварийному завершению программы, а выведет понятное сообщение об ошибке в поток Console.Error.
  • Запись данных: С помощью оператора using открывается объект StreamWriter для записи текста в созданный файл. После этого вызывается рекурсивный метод WalkAndCollect.

2. Рекурсивный обход (метод WalkAndCollect) Этот метод является ядром приложения. Он принимает три параметра: корневую директорию (нужна для вычисления относительных путей), текущий обрабатываемый каталог и поток записи.

  • Фильтрация по расширениям: Метод запрашивает список разрешенных расширений у функции GetAllowedExtensions(). Затем он перебирает все файлы в текущем каталоге через Directory.EnumerateFiles(currentDir). Если расширение файла отсутствует в белом списке (сравнение идет без учета регистра благодаря ToLowerInvariant()), файл пропускается. Это защищает программу от попыток прочитать бинарные данные (изображения, видео, архивы).
  • Относительные пути: Для каждого подходящего файла вычисляется его относительный путь относительно корня (Path.GetRelativePath(rootDir, filePath)). В итоговом файле вместо полного системного пути вроде C:\Users\Admin\project\src\App.cs пользователь увидит короткий путь вида src\App.cs.
  • Чтение и запись контента: Содержимое файла полностью считывается в оперативную память методом File.ReadAllText(filePath) в кодировке UTF-8.
    • Сначала в выходной файл записывается заголовок раздела: --- ОтносительныйПутьКФайлу ---.
    • Затем записывается само содержимое.
    • Программе важна структура: перед добавлением разделителя между файлами проверяется условие !content.EndsWith(Environment.NewLine). Если последний символ прочитанного файла — не перенос строки, программа принудительно добавляет его. Это гарантирует, что разделитель ----------------------------------------------------------------- всегда начнется с новой строки, предотвращая «слипание» текстов разных файлов.
  • Рекурсия: После обработки всех файлов в текущей папке метод вызывает сам себя для каждой найденной подпапки (Directory.EnumerateDirectories(currentDir)). Это позволяет программе спуститься на любую глубину вложенности каталогов.

3. Настройка фильтрации (метод GetAllowedExtensions) Здесь жестко заданы расширения файлов, которые попадут в сборку. Список включает типичные форматы для разработки ПО:

  • Код: .cs
  • Текст и документация: .txt, .md
  • Данные и конфиги: .json, .xml, .config
  • Веб-разработка: .html, .css, .js Для добавления новых типов файлов пользователю достаточно вписать их расширения в этот список.

Комментариев нет:

Отправить комментарий