
Best Answer escafandra , 11 January 2017 - 06:16 PM
Gracias escafandra, viendo SHFileOperation hice lo siguiente:
delphi
function TFUpdater.DescargaExe(const AFrom: string; const ADestino: string): Boolean; Var FileOptions: TShFileOpStruct; begin FileOptions.Wnd := Application.MainForm.Handle; //Función Copiar (Hay FO_DELETE, FO_MOVE, FO_RENAME, Etc) FileOptions.wFunc := FO_COPY; //Archivo a copiar FileOptions.pFrom := PWideChar(AFrom); //Destino FileOptions.pTo := PWideChar(ADestino); //Activamos que creemos la carpeta automáticamente en caso de no existir FileOptions.fFlags := FOF_NOCONFIRMMKDIR; //Executamos la operación y devolvemos su resultado Result := SHFileOperation(FileOptions) = 0; end;
Hágame saber si es necesario algo más, dado que las copias es mayormente desde el Servidor al equipo local, ¿Con eso Bastará?, no puedo probarlo aún, y será mañana en la oficina.
Saludos.
Fíjate en este código:
uses ShellApi; function SHCopy(Source, Target: String): integer; var FS: SHFILEOPSTRUCT; begin ZeroMemory(@FS, sizeof(SHFILEOPSTRUCT)); FS.wFunc:= FO_COPY; FS.pFrom:= PCHAR(Source + #0 + #0); FS.pTo:= PCHAR(Target + #0 + #0); FS.fFlags:= FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION; Result:= SHFileOperation(FS); end;
Entiendo que usas UNICODE, y por lo tanto SHFileOperationW. Posíblemente si usas un Delphi moderno ya asuma SHFileOperationW, pero las cadenas deben terminar en un doble nulo que te falta en el código.
También debes inicializar a 0 los miembros de la estructura SHFILEOPSTRUCT que no uses.
Saludos.
Go to the full post