52645.fb2
|go| Я не понял эти строки:
{ 54 } with Form1.CheckListBox1 do
{ 55 } Checked[Items.Add(Target+'\'+ SR.Name)] := true;
|t_| Это можно было бы написать более подробно (и более понятно)
var n : integer; // номер строки в списке
...
n := Form1.CheckListBox1. Items.Add(Target+'\'+ SR.Name);
Form1.CheckListBox1.Checked[n] := true;
Но мне не хотелось вводить совершенно лишнюю переменную.
|go| Хорошо, а что это за загадочные точки в строках 43 и 44
{ 43 } if (SR.Name <> '.')
{ 44 } and (SR.Name <> '..')
|t_| Это особенности операционной системы, две точки это обращение к родительской папке, а одна это обращение к текущей папке.
Давай сделаем маленький эксперимент.
В любой папке создай текстовый файл.
Скопируй в него следующий текст
rem начало кода
cd ..
dir
pause
rem конец кода
сохрани изменения.
теперь переименуй файл, ну например proba.bat
Вся соль тут в расширении.
Запусти файл на исполнение.
В окошке с заголовком cmd.exe ты увидишь распечатку содержимого родительского (для текущего каталога) каталога { кстати, обрати внимание я сразу сбился на досовскую терминологию, напомню, каталог это папка }
И вот смотри, вверху, те самые точки. Т.е. операционная система при поиске всегда выдает ссылки на текущую и родительские папки, но нам они абсолютно не нужны и посему мы исключаем их из рассмотрения.
Do you understand?
|go|Oh! Yes, yes!
А как насчет строчки 49
{ 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 ... - это тоже папки.
Поэтому лучше сначала обрезать значение с помощью &