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

Материал из DRKB

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


Способ 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);
end;

Надо путь писать:

c:\\test\dfg

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


Author: Baa
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 03155