Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Видеокурс программиста и крэкера 5D 2O17
(актуальность: сентябрь 2O17)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Рекурсивное удаление файлов и подкаталогов

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


 {
 Здесь я привожу немного сокращенный код, который я создавал для 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;
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS