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


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


Способ 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 http://forum.vingrad.ru







DELPHI FAQ




EOMY TOP 100      Рейтинг@Mail.ru      Rambler's Top100