ListView1.Items.EndUpdate; // Прорисовываем все изменения сразу

С этим разобрались, можно ехать дальше. После вызова BeginUpdate я очищаю текущий список элементов с помощью вызова ListView1.Items.Clear.

Далее идёт цикл поиска файлов, с которым мы уже немного познакомились в 10-й главе моей книги. Здесь я только напомню тебе этот процесс:

FindFirst -открывает поиск. В качестве первого параметра выступает маска поиска. Если ты укажешь конкретный файл, то система найдёт его. Но это не серьёзно, лучше искать более серьёзные вещи. Например, ты можешь запустить поиск всех файлов в корне диска С. Для этого первый параметр должен быть 'C:*.*'. Для поиска только файлов ЕХЕ, в папке Fold ты должен указать 'C:Fold*.exe'.

Второй параметр -атрибуты включаемых в поиск файлов. Я использую faAnyFile, чтобы искать любые файлы. Тебе доступны

faReadOnly -искать файлы с атрибутом ReadOnly.

faHidden -искать скрытые файлы.

faSysFile -искать системные файлы.

faArchive -искать архивные файлы.

faDirectory -искать директории.

Последний параметр -это структура в которой нам вертеться информация о поиске, а именно имя найденного файла, размер, время создания и т.д. После вызова этой процедуры, я проверяю на корректность найденного файла. Если всё в норме, то запускается цикл Repeat -Until. Этот цикл выполняет операторы расположенные между repeatи until, пока условие расположенное после слова until является верным. Как только условие нарушается, цикл прерывается. Этот цикл похож на while, но с одним отличием. Если в цикле whileусловие заведомо не верно, то операторы внутри цикла не выполняться. А в Repeat-Untilвыполнятся, потому что сначала происходит выполнение операторов, а лишь затем проверка Until. Рассмотрим пример:

index:=1;

while index=0 do Param:=0;

В этом примере оператор Param:=0; не будет выполнен, потому что index=1 и условие заведомо не верно.

index:=1; repeat Param:=0; until index=0;

В этом примере Param:=0 выполнится, Потому что сначала выполняется этот оператор, а лишь потом проверка на равенство index нулю.

Хочу предупредить, что функция поиска, может возвращать в качестве найденного имени в структуре SearchRec (параметр Name) точку или две точки. Если ты посмотришь на директорию, то таких файлов не будет. Откуда берутся эти имена? Имя файла в виде точки указывает на текущую директорию, а имя файла из двух точек указывает на директорию верхнего уровня. Если я встречаю такие имена, то я их просто отбрасываю: