350______________________________Часть II. Программирование на C++

16: // имя файла, возвращенное в ffblk, используется

// для поиска следующего файла 17: done = findnext( sffblk) ;

18: } 19: }

Вы видите, насколько просто использовать эти две функции в структурной программе. В строке 10 определена структура struct ffblk (ее описание находится в заголовке dos.h). Содержащаяся в ней информация очень близка к той, которая находится в элементе дискового каталога.

В 12 строке определена целая переменная done, по значению которой в 13 строке проверяется условие окончание цикла while. В качестве начального ей присваивается значение, возвращенное функцией findfirst. Функции findfirst передаются шаблон поиска filemask, ссылка на ffblk и число, конкретизирующее атрибуты искомых файлов. '

Пока значение done не равно нулю (см. строку 13), очередное найденное имя файла из структуры ffblk выводится на консоль и ссылка» на эту структуру передается функции findnext для поиска следующего подходящего файла. В результате на консоль выводится список всех файлов текущего каталога на текущем диске.

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

Однако такой механический перенос кусков текста неудобен и таит в себе опасность внесения случайных ошибок. Как уже говорилось, одно из назначений классов состоит в объединении разрозненных частей в единое целое;

другое — в логическом объединении согласованных процессов, целью которых является, например, захват ресурса или выполнение задачи. Давайте попробуем упростить использование этих двух функций.

Второе приближение

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

Замечание

1 Тестирование классов удобно осуществлять при помощи так называемого испытательного стенда — дополнительного кода, вставляемого прямо в текст модуля в окружении директив условной компиляции.