Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vtoraya_chast_uchebnika_po_WWW_Okonchat_variant...doc
Скачиваний:
31
Добавлен:
27.09.2019
Размер:
6.06 Mб
Скачать

5.4.3. Печать дерева каталогов

Операции с каталогами занимают значительное время в работе администраторов Web — сайтов. Необходимо постоянно следить за актуальностью данных, обновляя или удаляя ставшие ненужными файлы и каталоги. При этом часто возникает необходимость отделить каталоги и файлы, получить них информацию, удалить ненужные или сформировать дерево каталогов.

Рассмотрим подробнее подходы к решению последней задачи. Результат вывода дерева каталога представляют все, так как видели его хотя бы в ОС Windows . Это некий граф, в котором от корневого узла (папки) вниз и вправо идут дочерние узлы. На одной вертикали находятся узлы - дочки одного уровня, принадлежащие одному узлу, а вправо уходят потомки соответствующей папки. Соответствующая структура изображена в таблице Таблица 5 -16.

Но в данном случае основная проблема не в визуальности представления, а в том, что программист заранее не знает структуру и количество дочерних папок каждого узла. Поэтому алгоритм «ручного» решения выглядел бы так:

      1. Выбрали текущий каталог, дерево подкаталогов которого нам надо определить, и вывели находящиеся в нём подкаталоги — подкаталоги первого уровня, подсчитав их.

      2. Выбрали первый подкаталог 1-го уровня в качестве текущего и вывели его подкаталоги, которые будут каталогами 2-го уровня, подсчитав их число. Если бы таковых не оказалось, аналогичная операция выполнялась бы для второго подкаталога первого уровня. В противном случае, необходимо было бы выводить каталог третьего уровня для первого из ранее полученного каталога 2-го уровня.

      1. И так далее ….

Налицо очевидная итеративность действий, которую невозможно реализовать с помощью одной функции.

Поэтому ясно, что при разных по глубине и объёму вложенности каталогах, автоматизировать процесс выдачи дерева каталогов, с помощью одной и той же функции, можно только задействовав механизм рекурсивного вычисления функций (смотри раздел 4.7).

При этом функция вывода дерева должна внутри себя содержать обращение (вызов) к самой себе.

Необходимо запомнить одно правило: при рекурсивном вызове функции не передавать в качестве аргументов записи каталога "." и "..", указывающие на текущий и родительский каталоги, так как в этом случае можно потерять данные. Нужно пропускать эти записи явным образом при помощи условного оператора.

Реализация такой функции представлена примером Пример 5-9.

Таблица 5‑16

Визуальное отображение дерева каталогов для текущего каталога ТекКат

Корневой каталог

Каталог 1-го уровня

Каталог 2-го уровня

Каталог 3-го уровня

Каталог 4-го уровня

Каталог 5-го уровня

Текущий каталог ТекКат

ттттттттттттттттТКат

а

а1

а11

а12

а13

а2

а21

a211

a212

a22

a221

a2211

b

b1

b11

b2

c

c1

c11

c12

Ниже приводится реализация вывода дерева каталога: