Skip to content

Borrar una Carpeta desde Delphi

Una de las cuestiones mas peligrosas para un usuario final, es permitir que una aplicación borre contenido. Pero muchas veces es una necesidad para los desarrolladores.

Así como podemos copiar una carpeta desde Delphi o mover una carpeta desde Delphi, también podemos borrar una carpeta desde Delphi con una función similar a las anteriores.

Cabe aclarar que debemos utilizar esta función con mucho cuidado, ya que al borrar una carpeta, borramos todo su contenido sin importar cual sea. Recomendamos que si no se sabe el contenido de la carpeta a borrar, utilicemos la función para borrar archivos en ves de carpetas y así tener mayor detalle de lo que eliminamos.

La función para borrar una carpeta desde Delphi es la siguiente:

Uses
  ShlObj, Masks, ShellApi;

...

function BorrarCarpeta(const vOrigen: string) : boolean;
var
  vCarpetas: TSHFileOpStruct;
begin
  // Inicializamos la variable vCarpetas
  FillChar(vCarpetas, SizeOf(vCarpetas), #0);

  // Preparamos las propiedades de vCarpetas para borrar
  vCarpetas.wFunc := FO_DELETE;
  vCarpetas.Wnd := GetDesktopWindow;
  vCarpetas.pFrom := PChar(vOrigen+#0#0);

  // Cargamos las banderas de
  // FOF_NOCONFIRMATION -> no pide confirmación para copiar
  // FOF_SILENT -> no muestra el dialogo de progreso
  // FOF_ALLOWUNDO -> preserva la información para deshacer, si es posible
  vCarpetas.fFlags := FOF_NOCONFIRMATION or FOF_SILENT or FOF_ALLOWUNDO;

  // Ejecutamos el proceso con ShFileOperation y si devuelve 0, la operación es un éxito
  Result := (ShFileOperation(vCarpetas) = 0);
end;

Modo de uso

Al igual que las funciones mover o copiar, su uso es sumamente fácil, a continuación, un ejemplo:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if BorrarCarpeta(PChar('c:\carpeta1')) then
    Showmessage('Se borró la carpeta con éxito')
  else
    Showmessage('No se pudo borrar la carpeta');
end;