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;