Abortar download do IdFtp

16/06/2008

1

Olá pessoal....gostaria de parabenizar a qualidade desse forum, muito bom mesmo....

Mas vamos ao que interessa

Estou fazendo um atualizador do meu sistema usando o IdFtp 9 e Delphi 7.

Quando eu faço IdFtp1.Abort ele cancela o download numa boa. Mas não estou conseguindo apagar o arquivo que ele gerou ´pela metade´, ou seja, não é um arquivo completo.

Estou tentando fazer isso e não funciona, ele não apagar o arquivo e por consequencia o resto do código tb...rsss:

IdFTP1.Abort;
//apagar o arquivo que não foi completado
if FileExists(caminho_sistema) then
DeleteFile(caminho_sistema);
// voltar o nome do antigo .exe pois quando ele faz o download ele renomeia o arquivo original para .old
RenameFile(caminho_antigo,caminho_sistema);
Application.MessageBox(´Atualização cancelada pelo usuário!´+#13+13+´A versão anterior do sistema será restaurada.´+13+13+
´O sistema será reinicializado.´,´Atualização Cancelada´,MB_OK + MB_ICONINFORMATION);
WinExec(Pchar(caminho_sistema),SW_SHOWNORMAL);
IdFTP1.Disconnect;
Application.Terminate;

Já testei os caminhos e eles estão certos, o interessante que ele não deleta mas não dá nenhum erro.

Alguem pode me ajudar?

Obrigado


Responder

Posts

talvez ainda não tenha sido efetuada a gravação definitiva do arquivo (pode estar ainda como temporário)
dê um tempinho antes de tentar deletar o arquivo.
algo assim:
  IdFTP1.Abort;
  IdFTP1.Disconnect; // já desconecto depois de abortar o download

  // antes de apagar o arquivo que não foi completado,
  // espera 2 segundos para a gravação definitiva do arquivo
  // (note que 2 segundos pode ainda não ser suficiente)
  Sleep(2000);

  // apaga o arquivo que não foi completado
  if FileExists(caminho_sistema) then
    DeleteFile(caminho_sistema);

  // volta o nome do antigo .exe, pois quando ele faz o download
  // ele renomeia o arquivo original para .old
  RenameFile(caminho_antigo,caminho_sistema);
  Application.MessageBox(
    ´Atualização cancelada pelo usuário!´+#13+13+
    ´A versão anterior do sistema será restaurada.´+13+13+
    ´O sistema será reinicializado.´,
    ´Atualização Cancelada´,
    MB_OK + MB_ICONINFORMATION
  );
  WinExec(Pchar(caminho_sistema),SW_SHOWNORMAL);
  Application.Terminate;



Responder

16/06/2008

Altingon

Obrigado pela resposta mas continua não funcionando, inclusive aumente o tempo e o resultado foi o mesmo...


Responder

16/06/2008

Altingon

Mudei a sequencia do código e funcionou...coloquei a parte de excluir e renomear no onClose da tela de atualização.

Valeu pessoal muito obrigado


Responder