Skip to content

Mover una Carpeta desde Delphi

Así como vimos en en el artículo de copiar una carpeta desde Delphi y borrar una carpeta desde Delphi, también necesitamos mover una carpeta desde Delphi.

Para mover una carpeta desde Delphi y no morir en el intento, les comparto esta función, y está explicada detalladamente:

Uses
  ShlObj, Masks, ShellApi;

...

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

  // Preparamos las propiedades de vCarpetas para mover
  vCarpetas.wFunc := FO_MOVE;
  vCarpetas.Wnd := GetDesktopWindow;
  vCarpetas.pTo := PChar(vOrigen); // Carpeta Origen
  vCarpetas.pFrom := PChar(vDestino+#0#0); // Carpeta Destino

  // 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

El modo de uso de la función MoverCarpeta desde Delphi, es muy simple,colocamos por ejemplo en el evento OnClick de un Button el siguiente código:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if MoverCarpeta(PChar('c:\carpeta1'), PChar('c:\carpeta2')) then
    Showmessage('Se movió con éxito')
  else
    Showmessage('No se pudo mover la carpeta');
end;