Mejor respuesta escafandra , 11 enero 2017 - 06:16
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.
Ir al mensaje completo









