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;