Как удалить директорию, содержащую файлы и поддиректории

Автор: Abdulaziz Jasser

В Delphi есть функция RemoveDir которая удаляет пустые директории. Но как быть, если директория содержит файлы и поддиректории?

Для этой цели была создана функция, выполняющая те же действия, что и RemoveDir, но обладающая большими возможностями.

Совместимость: Все версии Delphi

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;
Пример:
if NOT MyRemoveDir('D:\myDir') then 
   ShowMessage('Can NOT delete dir'); 
Заметка:

Кстати системные, скрытые и read-only файлы тоже будут удалены.