Рекурсивное удаление файлов и подкаталогов
|
Один программист очень любил рекурсию. И когда шеф начинал требовать у него отчет о проделанной работе, он отсылал его к ... себе. И так до переполнения стека у шефа.
|
{
Здесь я привожу немного сокращенный код, который я создавал для 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;
|
|