Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Удаление каталога с подкаталогами


Автор: Pakshin A. S. 6.11.2004, 18:25
Способ 1: проход по дереву каталогов
Код

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 
Чтобы вначале "\\" было...иначе не будет удалять диры из корня 



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)