FTP como resolver este probelma
[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
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
Dpinho
Curtidas 0
Respostas
Massuda
20/12/2005
Não entendi direito seu problema... sua dificuldade é testar se o arquivo está no servidor?
Que componente você está usando (Indy, ICS, etc)?
Que componente você está usando (Indy, ICS, etc)?
GOSTEI 0
Dpinho
20/12/2005
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
GOSTEI 0
Massuda
20/12/2005
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]
GOSTEI 0
Dpinho
20/12/2005
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
GOSTEI 0
Pain_elemental
20/12/2005
Use a indy. coloque a IdFTP na uses e use essa função
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.
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.
GOSTEI 0
Dpinho
20/12/2005
Use a indy. coloque a IdFTP na uses e use essa função
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.
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;
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
GOSTEI 0
Pain_elemental
20/12/2005
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.
esse mesmo componente tem uma funcao Delete(AFile). faça da mesma forma que o list.
GOSTEI 0
Dpinho
20/12/2005
[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
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
GOSTEI 0
Massuda
20/12/2005
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.
No seu código, ao invés de Exit, acho que o correto seria dar um Break no loop.
GOSTEI 0
Dpinho
20/12/2005
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
GOSTEI 0
Massuda
20/12/2005
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´);
GOSTEI 0
Pain_elemental
20/12/2005
... que deve funcionar.
Deve nao, vai :D
GOSTEI 0
Dpinho
20/12/2005
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
Muito obrigado
GOSTEI 0