[C ++] Как использовать std :: stack для работы с иерархией файлов / каталогов?

У меня есть 3 класса, Root, CFile, SubDirectory. Корень — это абстрактный класс. CFile и SubDirectory являются производными от Root. CFile имеет атрибуты: имя: строка, размер: int, уровень: int. Подкаталог имеет атрибуты: name: string, size: int, level: int, вектор, который содержит файлы и каталоги, а также функцию void add (), которая помещает файл или каталог в вектор. Если файл в каталоге, уровень файла выше, чем в каталоге на единицу. Все сеттеры и геттеры определены.

Теперь у меня есть файл с именем DirRead.h, который может структурировать все записи в текущем каталоге (папка компьютера). Каждая запись имеет имя файла, размер, уровень и тип (файл или каталог). В основной функции меня просят использовать информацию из DirRead в качестве входных данных для построения иерархии файловой системы (используя CFile и SubDirectory). DirRead.h проводит предварительный заказ. Рекурсия в этом случае не принимается (я пытался, и DirRead.h сообщил об ошибке). Меня просят использовать стек для обработки ввода, но я не знаю как. Видимо уровень здесь действительно важен. Я попытался создать стек и поместить все файлы и каталоги в стек, а затем сравнить уровень, чтобы сформировать иерархию. Но у Root нет функции Add, нет способа добавить CFile в SubDirectory, потому что все они Root *. Кто-нибудь знает, как это сделать? Спасибо.

0

Решение

Вы используете стек, чтобы отслеживать каталоги, которые вы еще не исследовали. Вы можете использовать следующий алгоритм:

  1. Вставьте корневой каталог в стек.

  2. Вытащите верхнюю запись из стека. Если стек пуст, остановитесь, все готово.

  3. Пройдите по каталогу, который вы сняли со стека. Добавьте каждый файл и каталог в нем в вашу структуру данных. Кроме того, поместите каждый каталог, который вы найдете в свой стек.

  4. Переходите к шагу 2.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]