Borrar una carpeta (y su contenido)

2474 vistas

Tenemos dos posibilidades a contemplar
- La carpeta está vacÃa: podemos usar la función RemoveDir(const Dir: String): Boolean
- La carpeta no está vacÃa:
    Aquà tendremos dos posibilidades, o bien usar la API de la unidad ShellAPI o bien hacer un borrado recursivo usando TSearchRec, FindFirst, FindNext, DeleteFile y RemoveDir

Con el API



delphi
  1. uses
  2.   ShellApi;
  3.  
  4. function DelDir(Dir: String): Boolean;
  5. var
  6.   fos: TSHFileOpStruct;
  7. begin
  8.   ZeroMemory(@fos, SizeOf(fos));
  9.   with fos do
  10.   begin
  11.     wFunc := FO_DELETE;
  12.     fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
  13.     pFrom := PChar(Dir + #0);
  14.   end;
  15.   Result := (0 = ShFileOperation(fos));
  16. end;



Con el otro método



delphi
  1. procedure DeleteDir(Dir: string);
  2. begin
  3.   EmptyDir(Dir);
  4.   RemoveDir(Dir);
  5. end;
  6.  
  7. procedure EmptyDir(Dir: string);
  8. var
  9.   Files: integer;
  10.   Search: TSearchRec;
  11. begin
  12.   Dir := IncludeTrailingPathDelimiter(Dir);
  13.   Files := FindFirst(Dir + '*.*', faAnyFile, Search);
  14.   while Files = 0 do
  15.   begin
  16.     if Search.Attr <> faDirectory then
  17.       DeleteFile(Dir + Search.Name)
  18.     else
  19.       if (Search.Name <> '.') and (Search.Name <> '..') then
  20.         DeleteDir(Dir + Search.Name);
  21.  
  22.     Files := FindNext(Search);
  23.   end;
  24.   FindClose(Search);
  25. end;
  26.  
  27. // ejemplo de llamada
  28. procedure TForm1.Button1Click(Sender: TObject);
  29. begin
  30.   DeleteDir('c:\carpeta_a_borrar');
  31. end;



Nota: es preferible asegurarse de la existencia de la carpeta antes de borrarla