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.
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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)