Рекурсивный метод удаления файлов и вложенных папок по заданному пути:
function KillDir (Dir: AnsiString): boolean; var Sr: SysUtils.TSearchRec; begin {$I-} if (Dir <> '') and (Dir[length(Dir)] = '\') then Delete(Dir, length(dir), 1); if FindFirst(Dir + '\*.*', faDirectory + faHidden + faSysFile + faReadonly + faArchive, Sr) = 0 then repeat if (Sr.Name = '.') or (Sr.Name = '..') then continue; if (Sr.Attr and faDirectory <> faDirectory) then begin if AnsiLowerCase(ExtractFileExt(sr.Name)) = '.tmp' then begin FileSetReadOnly(Dir + '\' + sr.Name, False); DeleteFile(Dir + '\' + sr.Name); end end else KillDir(Dir + '\' + sr.Name); until FindNext(sr) <> 0; FindClose(sr); RemoveDir(Dir); // Удалит пустой каталог KillDir := (FileGetAttr(Dir) = -1); end;