function TForm1.DeleteDir(const Handle: THandle; const str: string): Boolean;
var
  f: TSHFileOpStruct;
begin
  if DirectoryExists(str) then
  begin
    memo1.Lines.Add('正在删除文件夹: '+str);
    FillChar(f, SizeOf(f), 0);
    f.Wnd := Handle;
    f.wFunc := FO_DELETE;
    f.pFrom :=  PAnsiChar(str);
    f.fFlags := FOF_NOCONFIRMATION;
    if SHFileOperation(f) = 0 then
      Result:= true
    else
      Result:= False;
  end else
    Result := False;
end;if (FindFirst(copyads + '*.*', faAnyFile, SearchRec) = 0) and (Restoring=true) then
begin   //删除文件夹
  repeat
    if ((SearchRec.Attr and faDirectory = 16) and (SearchRec.Name <> '.') and (SearchRec.Name <> '..')) then
    begin   
      if DeleteDir(self.Handle,copyads + SearchRec.Name)=true then
        memo1.Lines.Add('删除目录 '+copyads + SearchRec.Name)
      else
        memo1.Lines.Add('文件夹 '+copyads + SearchRec.Name+' 删除失败');
    end;
    Application.ProcessMessages;
  until (FindNext(SearchRec) <> 0);
  FindClose(SearchRec);
end;

解决方案 »

  1.   

    没用过 DeleteDir 不过好像WINDOWS有时删除文件的时候 就是不能一次性将文件夹下所有的文件删除的,而手动一个个删除却又可以。if DeleteDir(self.Handle,copyads + SearchRec.Name)=true then->
    if DeleteDir(self.Handle,copyads + SearchRec.Name) then
      

  2.   

    兄弟试试这个:
    function DelDirectory(const Source:string): boolean;
    var
      fo: TSHFILEOPSTRUCT;
    begin
      FillChar(fo, SizeOf(fo), 0);
      with fo do
      begin
        Wnd := 0;
        wFunc := FO_DELETE;
        pFrom := PChar(source+#0);
        pTo := #0#0;
        fFlags := FOF_NOCONFIRMATION+FOF_SILENT;
      end;
      Result := (SHFileOperation(fo) = 0);
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       DelDirectory('C:\TEST') ;
    end;