15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту




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

Автор: 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');


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