Задание Написать программу на языке C++ с использованием классов и наследования, которая будет производить поиск файлов по заданному имени в заданной папке и подпапках, и затем выводить на экран файлы, содержащие в имени заданные символы. Блок-схема работы программы Код программы SearchFile.h #include <sys/stat.h> #include <iostream> #include <string> #include <experimental/filesystem> using namespace std::experimental::filesystem; class FilePath { private: std::string directory_path_name; std::string subdirectory_name; std::string file_name; public: FilePath(std::string d_path_name, std::string d_name, std::string file_name_d) : directory_path_name(d_path_name), subdirectory_name(d_name), file_name(file_name_d) {} static void search_file(FilePath& file) { for (const auto& file_iter : directory_iterator(file.directory_path_name.c_str())) { auto file_info = file_iter.status(); auto file_type = file_info.type(); if (file_type == file_type::directory) { std::string update_path = file_iter.path().string(); FilePath update_file_path = FilePath(update_path, file.subdirectory_name, file.file_name); FilePath::search_file(update_file_path); } else if (file_type == file_type::regular) { std::string file_name1 = file_iter.path().filename().u8string(); bool is_file_true = false; for (int i = 0; i < file.file_name.length(); i++) { for (int j = 0; j < file_name1.length(); j++) { if (file_name1[j] == file.file_name[i]) { is_file_true = true; } } if (is_file_true == false) break; else { if (i == (file.file_name.length() - 1)) {} else { is_file_true = false; } } } if (is_file_true == true) { std::cout << "Файл с символами " << file.file_name << " находится в папке " << file_iter.path() << std::endl; } } else {} } } }; SearchFile.cpp #include <iostream> #include <string> #include "SearchFile.h" #include <locale> int main() { setlocale(LC_ALL, "RUSSIAN"); char main_directory_char[200]; char file_name_char[200]; std::cout << "Введите расположение папки для поиска файла: "; scanf("%s", main_directory_char); std::cout << "Введите имя файла: "; scanf("%s", file_name_char); std::string main_directory(main_directory_char); std::string file_name(file_name_char); FilePath dir_path = FilePath(main_directory, "", file_name_char); FilePath::search_file(dir_path); } Результат работы программы Дополнение std::filesystem предоставляет функцию, которая используется для определения того, существует ли уже файл или каталог с указанным путем или статусом. Для этого мы реализуем программу, в которой мы импортируем библиотечную «файловую систему» и создаем функцию void «демо». Для демонстрационной функции мы указываем путь и функцию статуса из файловой системы класса. Затем мы используем условие if-else, чтобы вернуть утверждение о существовании файла. Класс directory_iterator - Описывает итератор ввода, выполняющий последовательный перебор имен файлов в каталоге. Для итератора X выражение *X вычисляет объект класса directory_entry , который заключает имя файла и все, что известно о его состоянии. Класс хранит объект типа path, вызываемый mydir здесь в целях экспозиции, который представляет имя каталога для последовательности, и объект типа directory_entry , вызываемого myentry здесь, который представляет текущее имя файла в последовательности каталогов. Созданный по умолчанию объект типа directory_entry имеет пустое mydir имя пути и представляет итератор конца последовательности. Класс directory_entry где X — directory_iterator. - Описывает объект, Класс file_status - Создает оболочку для file_type. File_type: enum class file_type { not_found = -1, none, regular, directory, symlink, block, character, fifo, socket, unknown }; возвращаемый *X, Класс path хранит объект типа string_type, называемый myname здесь в целях демонстрации, подходящий для использования в качестве пути. string_type является синонимом для basic_string<value_type>, где value_type является синонимом для wchar_t в Windows. Заголовок <filesystem> предоставляет directory_iterator тип для итерации по отдельным каталогам, а recursive_directory_iterator класс выполняет рекурсивную итерацию по каталогу и его подкаталогам. После создания итератора путем передачи ему объекта path итератор указывает на первое значение directory_entry в пути. Создайте конечный итератор путем вызова конструктора по умолчанию. При итерации по каталогу можно обнаружить несколько типов элементов. К ним относятся каталоги, файлы, символьные ссылки, файлы сокетов и другие. Возвращает directory_iterator элементы в виде directory_entry объектов. Рекурсия - это такой способ организации обработки данных, при котором программа вызывает сама себя непосредственно, либо с помощью других программ. Рекурсивная функция - это функция, для которой существует алгоритм вычисления ее значений по произвольному значению аргумента. Итерация - способ организации обработки данных, при котором определенные действия повторяются многократно, не приводя при этом к рекурсивным вызовам программ. 0