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;