Самое простое, что нужно сделать, это позвонить TDirectory.Delete(Dir, True)
.
TDirectory
находится в IOUtils
, что является довольно недавним добавлением RTL.
Флаг True
передается параметру Recursive
, который означает, что содержимое каталогов удаляется до удаления каталога, что является важной частью удаления каталогов.
В комментарии вы сообщаете нам, что используете Delphi 7, и поэтому его нельзя использовать.
Ваш код выглядит в основном нормально. Тем не менее, вы не имеете в виду:
(Result.Attr and faAnyFile <> faDirectory)
Я думаю, вы имеете в виду:
(Result.Attr and faDirectory <> faDirectory)
Я бы, наверное, написал это следующим образом:
procedure TMyForm.Remove(const Dir: string);
var
Result: TSearchRec;
begin
if FindFirst(Dir + '\*', faAnyFile, Result) = 0 then
begin
Try
repeat
if (Result.Attr and faDirectory) = faDirectory then
begin
if (Result.Name <> '.') and (Result.Name <> '..') then
Remove(Dir + '\' + Result.Name)
end
else if not DeleteFile(Dir + '\' + Result.Name) then
RaiseLastOSError;
until FindNext(Result) <> 0;
Finally
FindClose(Result);
End;
end;
if not RemoveDir(Dir) then
RaiseLastOSError;
end;