PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Idftp.Get Travando o get do idftp trava como se tivesse em loop eterno. #384071

19/08/2010

0

ola a todos,

mim deparei com um problema que nao consegui a solução, ja procurei na internet, e nada.

tenho um programa que baixa arquivos do ftp da empresa, (windows 2003 server, tempo limite de conexão (em segundos) = 120.000).

as vezes, apenas as vezes, o sistema baixa o arquivo do ftp e trava, nao dando continuidade ao processamento, e nao baixando nenhum outro arquivo apos este que travou, se reiniciarmos o sistema e colocarmos para baixar o mesmo arquivo novamente, ele consegue baixar, ja verifiquei o arquivo no qual o ftp travou, e o mesmo chega normalmente, e o sistema mesmo assim trava, e nao apaga o arquivo do ftp, um detalhe que observei e que o arquivo fica aberto pelo programa que o baixou do ftp, como se ainda estivesse baixando, mas o arquivo e liberado apos matarmos o programa no gerenciador de processos.

observacoes:
- ja mudei o tempo limite de conexao do servidor para 120 segundos;
- o programa monitora o progresso do arquivo baixado, para testar ja desativei este monitoramento;
- verifiquei no servidor de ftp que a conexao com o micro que esta baixando o arquivo e perdida;
- apos a recepcao de cada arquivo o sistema quebra a conexao com o servidor, e refaz antes de iniciar a recepcao do proximo, antes nao era assim e tinha o mesmo erro;
- utilizo o delphi 7.fonte do programa:
begin
   Estatos.Panels[0].Text:='Iniciando conexão com Servidor...';
   Application.ProcessMessages;
   Screen.Cursor := crHourGlass;
   try
      IdAntiFreeze1.Active:=True;
      IdFTP2.Host:=EndFTP;
      IdFTP2.Username:=LogFTP;
      IdFTP2.Password:=SenFTP;
      IdFTP2.TransferType:=ftASCII;
      if IdFTP2.Connected then IdFTP2.Quit;
      try
         IdFTP2.Connect();
         if not IdFTP2.Connected then begin
            ShowMessage('Não foi possivel estabelecer a conexão com o servidor.');
         end
         else begin
            ListaArq:=TStringList.Create;
            ListaArq2:=TStringList.Create;
            try
               try
                  IdFTP2.List(ListaArq,'lojas\Envio\L'+TLJATIVA,False);
               except
                  IdFTP2.MakeDir('lojas\Envio\L'+TLJATIVA);
               end;
               try
                  IdFTP2.List(ListaArq2,'lojas\Envio\L'+TLJATIVA+'\M*.ADM',False);
               except
                  ListaArq2.Clear;
               end;
               ListaArq.Clear;
               for x:=0 to ListaArq2.Count-1 do
                   ListaArq.Add(Copy(ListaArq2.Strings[x],Pos('\M',ListaArq2.Strings[x])+1,11));
               try
                  IdFTP2.List(ListaArq2,'lojas\Envio\L'+TLJATIVA+'\P*.DAB',False);
               except
                  ListaArq2.Clear;
               end;
               for x:=0 to ListaArq2.Count-1 do
                   ListaArq.Add(Copy(ListaArq2.Strings[x],Pos('\P',ListaArq2.Strings[x])+1,11));
               if (ListaArq.Count>0) then begin
               ProgTot.MaxValue:=ListaArq.Count;
               for x:=0 to ListaArq.Count-1 do begin
                   ProgTot.Progress:=x+1;
                   Application.ProcessMessages;
                   if not IdFTP2.Connected then IdFTP2.Connect();
                   Estatos.Panels[0].Text:='Recebendo arquivo ('+ListaArq.Strings[x]+').';
                   cTenta:=0;
                   while (cTenta<=5) do begin
                         try
                         if FileExists(SCECFG+'Retorno\'+ListaArq.Strings[x]) then
                            DeleteFile(SCECFG+'Retorno\'+ListaArq.Strings[x]);
                         ProgArq.Progress:=0;
                         ProgArq.MaxValue:=ABS( IdFTP2.Size('Lojas\Envio\L'+TLJATIVA+'\'+ListaArq.Strings[x]) );
                         IdFTP2.Get('Lojas\Envio\L'+TLJATIVA+'\'+ListaArq.Strings[x],
                                    SCECFG+'RETORNO\'+ListaArq.Strings[x],True);
                         if FileExists(SCECFG+'Retorno\'+ListaArq.Strings[x]) then
                            break;
                         finally
                          cTenta:=(cTenta+1);
                          Estatos.Panels[0].Text:='Erro recebendo arquivo ('+
                                                  ListaArq.Strings[x]+
                                                  '), tentativa '+
                                                  Trim(InttoStr(cTenta))+' de 5.';
                         end;
                         Sleep(500);
                   end;
                   Estatos.Panels[0].Text:='Limpando retorno ('+ListaArq.Strings[x]+').';
                   IdFTP2.Delete('Lojas\Envio\L'+TLJATIVA+'\'+ListaArq.Strings[x]);
                   IdFTP2.Quit;
               end;
               end;
            finally
               ListaArq.Free;
               ListaArq2.Free;
            end;
         end;
      except on e:exception do begin
         ShowMessage('Conexão com o Servidor não foi estabelecida.'+#13+#10+#13+#10+e.Message);
      end;
   end;
   finally
      IdFTP2.Quit;
      IdFTP2.Disconnect;
      IdAntiFreeze1.Active:=False;
      Screen.Cursor:=crDefault;
      Estatos.Panels[0].Text:='Processo de Retorno terminado.';
   end;
end;
fico grato por qualquer ajuda.  
David Bezerra

David Bezerra

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar