Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Удаление каталога с подкаталогами

01.01.2007

Способ 1: проход по дереву каталогов (Функция для удаления каталогов, взята из рассылки "Мастера DELPHI. Новости мира компонент, FAQ, статьи..." - собственно код аналогичен написанному мной коду по рекурсивному проходу каталогов здесь)

Function MyRemoveDir(sDir : String) : Boolean;
var
iIndex
: Integer;
SearchRec : TSearchRec;
sFileName
: String;

begin
Result := False;
sDir
:= sDir + '\*.*';
iIndex
:= FindFirst(sDir, faAnyFile, SearchRec);
while iIndex = 0 do
begin
sFileName
:= ExtractFileDir(sDir)+'\'+SearchRec.Name;
if SearchRec.Attr = faDirectory then
begin
if (SearchRec.Name <> '' ) and (SearchRec.Name <> '
.') and (SearchRec.Name <> '..') then MyRemoveDir(sFileName);
end
else
begin
if SearchRec.Attr <> faArchive then FileSetAttr(sFileName, faArchive);
if NOT DeleteFile(sFileName) then ShowMessage('
Could NOT delete ' + sFileName);
end;
iIndex := FindNext(SearchRec);
end;
FindClose(SearchRec);
RemoveDir(ExtractFileDir(sDir));
Result := True;
end;

Способ 2: Использование ShellApi

uses ShellApi;
...
var sh : SHFILEOPSTRUCT;
begin
...
sh
.Wnd := Application.Handle;
sh
.wFunc := FO_DELETE;
sh
.pFrom := 'c:\\test\0';
sh
.pTo := nil;
sh
.fFlags := FOF_NOCONFIRMATION or FOF_SILENT;
sh
.hNameMappings := nil;
sh
.lpszProgressTitle := nil;
 
SHFileOperation (sh);
...
 

Надо путь писать : c:\\test\dfg

Чтобы вначале "\\" было...иначе не будет удалять диры из корня

Автор: Baa

Взято с Vingrad.ru https://forum.vingrad.ru