Skip to content

Copiar una Carpeta desde Delphi

Muchas veces, dentro de nuestros proyectos, necesitamos copiar el contenido de una carpeta de un lado a otro, mover una capeta desde Delphi o borrar una carpeta desde Delphi.

Y por experiencia propia, comenzamos a buscar alternativas, que tal vez funcionen bien, pero no son lo programablemente correcto.

Para realizar realmente lo que debemos hacer, les comparto esta función para copiar carpetas desde delphi, no es para nada compleja, y está explicada detalladamente:

Uses
  ShlObj, Masks, ShellApi;

...

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

  // Preparamos las propiedades de vCarpetas para copiar
  vCarpetas.wFunc := FO_COPY;
  vCarpetas.Wnd := GetDesktopWindow;
  vCarpetas.pTo := vOrigen; // Carpeta Origen
  vCarpetas.pFrom := 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

Para utilizar esta función y copiar carpetas desde delphi, solo debemos llamarla como lo mostramos a continuación:

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