Ver Mensaje Individual
  #15  
Antiguo 22-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Asegurate de leer la documentación

La funcion CopyFile devuelve True o False segun la operación tuvo éxito o no

Tu error es que tu codigo sigue operando sin chequear el valor de retorno. Las funciones de la API de Windows no suelen elevar excepciones; es por esto que la mayoria retorna el Boolean

Luego, existe el método RaiseLastOSError definido en la unidad SysUtils que eleva una excepción con el mensaje y código de la última excepción que se generó al llamar una llamada a la API de Windows

Podrías refactorizar tu código de la siguiente manera:

Código Delphi [-]
  if not CopyFile(...) then
    RaiseLastOSError;

  // código que se ejecuta si el archivo fue copiado con éxito

Otra forma de hacerlo en mi opinión mas limpia es usando la funcion Win32Check, también de la unidad SysUtils

Win32Check chequea el valor de retorno de la función en cuestión, y si es False (hubo un error) invoca a RaiseLastOSError

Código Delphi [-]
  if Win32Check(CopyFile(...)) then
  begin
    // código que se ejecuta si el archivo fue copiado con éxito
  end;
Responder Con Cita