Рекурсия - [3]
{ 51 } if ScanEmtyDir( Target+'\'+ SR.Name)
{ 52 } then // удаление пустой папки
{ 53 } begin
{ 54 } with Form1.CheckListBox1 do
{ 55 } Checked[Items.Add(Target+'\'+ SR.Name)] := true;
{ 56 } end;
{ 57 } end;
{ 58 } end;
{ 59 } Found := FindNext(SR);
{ 60 } END;{DosError = 0}
{ 61 } FindClose(SR);
{ 62 } end;
{ 63 }
{ 64 } procedure TForm1.Button1Click(Sender: TObject);
{ 65 } begin
{ 66 } if SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt],0)
{ 67 } then
{ 68 } begin
{ 69 } if Dir[length(Dir)]='\'
{ 70 } then delete(Dir, length(Dir),1);
{ 71 } CheckListBox1.Items.Clear;
{ 72 } ScanEmtyDir(Dir);
{ 73 } Label1.Caption := 'Найдено '+ IntToStr(CheckListBox1.Items.Count)
{ 74 } +' пустых папок.';
{ 75 } end;
{ 76 } end;
{ 77 }
{ 78 } procedure TForm1.FormCreate(Sender: TObject);
{ 79 } begin
{ 80 } Path := ExtractFileDir(ParamStr(0)) + '\';
{ 81 } Dir := Path;
{ 82 } end;
{ 83 }
{ 84 } procedure TForm1.Button2Click(Sender: TObject);
{ 85 } var
{ 86 } i : integer;
{ 87 } begin
{ 88 } CCount := 0;
{ 89 } with Form1.CheckListBox1 do
{ 90 } begin
{ 91 } for i := Items.Count - 1 downto 0 do
{ 92 } if Checked[i] then
{ 93 } begin
{ 94 } RmDir(Items[i]);
{ 95 } if IOResult = 0
{ 96 } then
{ 97 } begin
{ 98 } inc(CCount); // + 1 в счетчик
{ 99 } Items.Delete(i);
{ 100 } end;
{ 101 } end;
{ 102 } if Items.Count = 0
{ 103 } then ShowMessage('Удалено ' + IntToStr(CCount) +' папок.')
{ 104 } else ShowMessage('Не могу удалить '+intToStr(Items.Count)+' папок');
{ 105 } end;
{ 106 } end;
{ 107 }
{ 108 } end.
// конец кода
Скопируй сей текст в какой либо файл и давай на него посмотрим.
|go| Готово.
У матросов есть вопросов.
Я понял, почему ты переназвал функцию ScanEmtyDir, но почему наименование счетчика сменилось на Ccount
|t_| Сменил, чтобы не было конфликта имен с списком CheckListBox1, тут я немного схалтурил, рекомендуется давать осмысленные имена, ну бывает, поленился.
|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 ... - это тоже папки.
Поэтому лучше сначала обрезать значение с помощью &
В результате операции SR.Attr and $10 останется или 0 или $10, и это мы проконтролируем.
|go| Чёто сложновато.
|t_| Ну, я тут немножко повыёживался, не очень подробно объясняю.
Но, я хотел подвести к морали: программист должен очень много знать. В том числе работу операционной системы, и, а это святое - алгебру логики.
|go| Намек понял, не дурак. Надо подучить.
|t_| Ну, что ж, давай на этой оптимистичной ноте, заканчивать сегодняшнее занятие.

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

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

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)

Что такое ГЕЙМДИЗАЙН? Это не код, графика или звук. Это не создание персонажей или раскрашивание игрового поля. Геймдизайн – это симулятор мечты, набор правил, благодаря которым игра оживает. Как создать игру, которую полюбят, от которой не смогут оторваться? Знаменитый геймдизайнер Тайнан Сильвестр на примере кейсов из самых популярных игр рассказывает как объединить эмоции и впечатления, игровую механику и мотивацию игроков. Познакомитесь с принципами дизайна, которыми пользуются ведущие студии мира! Создайте игровую механику, вызывающую эмоции и обеспечивающую разнообразие.

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

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

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

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.