FTP como resolver este probelma

20/12/2005

4

[color=red:da8caa4803]procedure TForm1.ButconectarClick(Sender: TObject);
var
Host,User,Pass :String;
Port : Integer;
Passive : Boolean;
begin

Host:= ´ftp-teste.com.br´;
User :=´cttsystem´;
Pass := ´Testando´;
Port := 21;
Passive := true;
try
Screen.Cursor := crHourGlass;
try
ftp := TFtpConnection.Create(Host, User, Pass, Port);
ftp.OnStatus := OnFtpStatus;

if ftp.Connect(Passive) then
begin
i_conectado.visible := true;
i_desconectado.visible := false;

a_desconectar.Enabled := true;
l_enviado.Enabled := true;
l_enviado2.Enabled := true;
l_recibido.Enabled := true;
l_recibido2.Enabled := true;
l_conectar.caption := ´Conectado´;
p_conexion.Repaint();
Butconectar.enabled := false;
ButDesconne.enabled := True;
Timer1.enabled := true;
end
else
begin

MessageBox(Handle, PChar(´Se ha producido un error durante la conexión:´+#10131013+ftp.ResponseText),
´Conexión´, MB_ICONERROR);
end;
finally
Screen.Cursor := crDefault;
end;
finally
//colocar mensagem de não coneção
end;
end;[/color:da8caa4803]

Este é meu codigo de conexão, preciso verificar a existencia de um arquivo na pasta www/txt com o nome de Entradas.txt, caso positivo avisar o usuario pra receber, caso negativo continuar a monitorar
Alguem poderia me ajudar a fazer esta rotina

O Outro caso e criar o botão para enviar o arquivo para a pasta www/txt com o mesmo nome.

Tenho uma certa urgencia
Claudio


Responder

Posts

20/12/2005

Massuda

Não entendi direito seu problema... sua dificuldade é testar se o arquivo está no servidor?

Que componente você está usando (Indy, ICS, etc)?


Responder

21/12/2005

Dpinho

Não entendi direito seu problema... sua dificuldade é testar se o arquivo está no servidor? Que componente você está usando (Indy, ICS, etc)?


Sim, meu primeiro problema e testar se o arquivo esta no servidor
Não estou utilizando componentes, mas uma rotina que tirei de um demo ´FtpConnection´.

o que estou precisando fazer é uma aplicação que fique ativo bandeja do windows e verifique de cinco em cinco minutos se existe um arquivo no servidor e faça o dowloand para a filial e depois apague o arquivo do servidor.
Se alguem puder ajuda com ideias, acho que seria do interesse de muitos
Obrigado


Responder

21/12/2005

Massuda

Não conheço esse ´FTPConnection´, mas vai aí algumas dicas:[list:944aafa396][*:944aafa396]use um timer para periodicamente conectar com o servidor FTP[*:944aafa396]para saber se o arquivo está lá, liste o diretório e verifique se o arquivo está na lista retornada pelo servidor[*:944aafa396]se o arquivo não estiver disponível, desconecte do servidor; não permaneça conectado pois geralmente os servidores FTP (públicos) limitam o total de usuários conectados e o tempo de conexão[*:944aafa396]faça o teste de presença do arquivo levar em conta data e hora ou tamanho do arquivo... pode ser que você dê o azar de pegar o arquivo enquando ele está sendo posto no servidor, o que resultaria em um arquivo corrompido/incompleto[*:944aafa396]quem sobe (upload) o arquivo no servidor deve também ter um esquema que impeça ele de subir um arquivo enquanto você está baixando o arquivo; por exemplo, o arquivo só pode subir se ele não estiver lá[/list:u:944aafa396]


Responder

21/12/2005

Dpinho

Não conheço esse ´FTPConnection´, mas vai aí algumas dicas:[list:16775c1d2d][*:16775c1d2d]use um timer para periodicamente conectar com o servidor FTP[*:16775c1d2d]para saber se o arquivo está lá, liste o diretório e verifique se o arquivo está na lista retornada pelo servidor[*:16775c1d2d]se o arquivo não estiver disponível, desconecte do servidor; não permaneça conectado pois geralmente os servidores FTP (públicos) limitam o total de usuários conectados e o tempo de conexão[*:16775c1d2d]faça o teste de presença do arquivo levar em conta data e hora ou tamanho do arquivo... pode ser que você dê o azar de pegar o arquivo enquando ele está sendo posto no servidor, o que resultaria em um arquivo corrompido/incompleto[*:16775c1d2d]quem sobe (upload) o arquivo no servidor deve também ter um esquema que impeça ele de subir um arquivo enquanto você está baixando o arquivo; por exemplo, o arquivo só pode subir se ele não estiver lá[/list:u:16775c1d2d]


Caro amigo, agradeço a sua ajuda
Pensei em tudo isto, meu problema e que estou comdificuldades em implementar isto no codigo e preciso de exemplo.
Se puder ou tiver um codigo usado que não precisa e quizer doar, agradeceria.. rsss.
Muito obrigado, por tudo


Responder

21/12/2005

Pain_elemental

Use a indy. coloque a IdFTP na uses e use essa função

function FTPFileExists(const AHost, AUser, APass, AFile: string): boolean;
begin
  with TIdFTP.Create(Nil) do
    try
      Host := AHost;
      Username := AUser;
      Password := APass;
      Connect;
      List(AFile);
      Result := ListResult.Count > 0;
      Close;
    finally
      Free;
    end;
end;


Verifique que não existe um ´fileexists´ no protocolo ftp, vc tem q mandar um list e verificar se o servidor retorna algo.

Acho que ta bem mastigado.


Responder

21/12/2005

Dpinho

Use a indy. coloque a IdFTP na uses e use essa função
function FTPFileExists(const AHost, AUser, APass, AFile: string): boolean;
begin
  with TIdFTP.Create(Nil) do
    try
      Host := AHost;
      Username := AUser;
      Password := APass;
      Connect;
      List(AFile);
      Result := ListResult.Count > 0;
      Close;
    finally
      Free;
    end;
end;
Verifique que não existe um ´fileexists´ no protocolo ftp, vc tem q mandar um list e verificar se o servidor retorna algo. Acho que ta bem mastigado.


Valeu este rotina, mas ta dando erro de incopatibilidade em List(AFile)
e como posso deletar o arquivo do servidor
Depois de verificar se existe, faço o dowloand e apago o arquivo


Responder

21/12/2005

Pain_elemental

fiz com a indy 10, que á a que eu tenho instalada, e realmente há incompatibilidade entre as versões. Deve ter uma list com mais parametros nas outras versoes.

esse mesmo componente tem uma funcao Delete(AFile). faça da mesma forma que o list.


Responder

21/12/2005

Dpinho

[color=red:2b8d252c37]Lista := TstringList.Create;
IdFTP1.changedir(´www/txt´);
IdFTP1.list(Lista,´*.txt´,False);
for i:=0 to Lista.Count-1 do
begin
if Lista[i]= ´Entrada.txt´ then
begin
showmessage(´ok´);
IdFTP1.get(´Entrada.txt´, ´c:\lixo\Arq\Entrada.txt´);
IdFTP1.Delete(´Entrada.txt´);
exit;
end
else
begin
Showmessage(´Não existe arquivo de entrada no servidor´);
end;
end;
Lista.Free;[/color:2b8d252c37]


Me ajudem neste codigo, preciso deletar o arquivo e não consigo


Responder

21/12/2005

Massuda

Que eu me lembro, o Delete deveria funcionar OK, mas isso depende da versão do Indy que você está usando... como você perguntou em outro tópico sobre como instalar o Indy, imagino que esteja usando a versão 9.0.18, que não deveria dar problemas.

No seu código, ao invés de Exit, acho que o correto seria dar um Break no loop.


Responder

21/12/2005

Dpinho

Que eu me lembro, o Delete deveria funcionar OK, mas isso depende da versão do Indy que você está usando... como você perguntou em outro tópico sobre como instalar o Indy, imagino que esteja usando a versão 9.0.18, que não deveria dar problemas. No seu código, ao invés de Exit, acho que o correto seria dar um Break no loop.


Estou usando a versão do Delphi 7
e o erro que esta retornanto é este:
[color=red:53fc237bbd]Destination file already exists[/color:53fc237bbd]

Preciso da ajuda de voces, e agradeço


Responder

21/12/2005

Massuda

Destination file already exists
O erro é no .Get e está acontecendo porque o você já deve ter baixado o arquivo uma vez com sucesso. Simplesmente inclua um...
DeleteFile(´c:\lixo\Arq\Entrada.txt´);
...antes do .Get que deve funcionar.


Responder

21/12/2005

Pain_elemental

... que deve funcionar.


Deve nao, vai :D


Responder

21/12/2005

Dpinho

Agradeço a todos que colaboraram com meu projeto em especial o Massuda. Esta funcionando muito bem e agora so finalizarei com um timer e trayicon.
Muito obrigado


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira