Delphi World - Рекурсивное удаление файлов и подкаталогов
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Рекурсивное удаление файлов и подкаталогов

Один программист очень любил рекурсию. И когда шеф начинал требовать у него отчет о проделанной работе, он отсылал его к ... себе. И так до переполнения стека у шефа.


{
Здесь я привожу немного сокращенный код, который я создавал для Borland
Pascal 5.5 под DOS (оригинальный код не делал rmDir, поэтому вы можете
поэкспериментировать с этим, передав указатель на каталог функции rmDir
в конце этого кода). Я подозреваю, что Delphi-версия может быть или
идентичной, или иметь некоторые различии в написании имен функций
(рекомендую ознакомиться с электронной документацией по Delphi, с темой,
где описаны функции для работы с файлами). Данный код не предусматривает
проверку атрибутов файлов, которые могут быть установлены для
предотвращения удаления файла. (В Pascal 5.5 вам необходимо между парой
{$I-}{$I+} {поместить функцию, которая вызывает проблему, не знаю,
делаете ли вы это в Delphi.)
}

procedure removeTree(DirName: string);
var
  FileSearch: SearchRec;
begin
  { для начала пробегаемся, и удаляем все файлы }
  chDir(DirName);
  FindFirst('*.*', Directory, FileSearch);
  while (DosError = 0) do
  begin
    if (FileSearch.name <> '.') and (FileSearch.name <> '..') and
      ((FileSearch.attr and Directory) <> 0) then
    begin
      if DirName[length(DirName)] = '\' then
        removeTree(DirName + FileSearch.Name)
      else
        removeTree(DirName + '\' + FileSearch.Name);
      ChDir(DirName);
    end;
    FindNext(FileSearch)
  end;

  { затем пробегаемся, и удаляем все каталоги }
  FindFirst('*.*', AnyFile, FileSearch);
  while (DosError = 0) do
  begin
    if (FileSearch.name <> '.') and (FileSearch.name <> '..') then
      Remove(workdir);
  end;
  FindNext(FileSearch)
end;
rmDir(DirName)
end;

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования