Рекурсия
Шрифт:
{ 49 } if ((SR.Attr and $10) = $10 ) then
|t_| Ты возможно заметил что в предыдущей строке комментария, дается расшифровка этой строки
{ 48 } // если это папка
Но
Во первых, открою тебе великую тайну. Папка (folder, каталог, директорий) на самом деле это файл.
Да, это просто файл, и отличается он от других только атрибутом. Вот теперь мы добрались до атрибутов.
Вызови help на слове TsearchRec и ты увидишь(кроме всего прочего) :
faReadOnly $00000001 Read-only files
faHidden $00000002 Hidden files
faSysFile $00000004 System files
faVolumeID $00000008 Volume ID files
faDirectory $00000010 Directory files
faArchive $00000020 Archive files
faAnyFile $0000003F Any file
Нас интересует faDirectory но у папки могут быть установлены и другие атрибуты, а устанавливаются они сложением соответствующих значений.
Значит для определения, что рассматриваемый файл является папкой сказать
if SR.Attr = $10
будет неправильно, т.к. $11, $12, $13, $14, $15 ...
– это тоже папки.
Поэтому лучше сначала обрезать значение с помощью &
В результате операции SR.Attr and $10 останется или 0 или $10, и это мы проконтролируем.
|go| Чёто сложновато.
|t_| Ну, я тут немножко повыёживался, не очень подробно объясняю.
Но, я хотел подвести к морали: программист должен очень много знать. В том числе работу операционной системы, и, а это святое - алгебру логики.
|go| Намек понял, не дурак. Надо подучить.
|t_| Ну, что ж, давай на этой оптимистичной ноте, заканчивать сегодняшнее занятие.
Сегодня мы сделали полезную, но, не очень необходимую утилитку.
В следующий раз мы будем продолжать тему "Рекурсия", я предлагаю сделать программку имитирующую windows Поиск, но с бОльшими возможностями:
Поиск регулярных выражений
Поиск в найденном
Сохранение и Загрузка списка найденных файлов
See you later.
|go| До связи.