Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rômulo Duarte Perez

Serviço Copiar, Colar e Deletar. Repetindo Serviço por Minuto.

Recommended Posts

Bom Dia a todos, estou desenvolvendo um serviço em Delphi e estou com dificuldade em fazer duas coisas.
Primeiramente não estou conseguindo fazer com que ache um arquivo no FTP que desejo que seja copiado e enviado para uma pasta especifica do computador em seguida deletada do FTP.
Segundo preciso fazer com quem esse serviço seja feito a cada 1 minuto sem interrupção.
Lembrando que as informações de conexão do FTP e do diretório estão em um arquivo texto especifico.
Estou mandando o código que já fiz para poderem analisar a melhor forma de fazer estas minhas duas duvidas.
program MyService;


uses
  Vcl.SvcMgr,StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdFTP, ExtCtrls, ComCtrls,
  Principal in 'Principal.pas' {srvPrincipal: TService};


{$R *.RES}
Var
FTP           : String;
PORT          : String;
USER          : String;
PASS          : String;
IP            : String;
FILE_PASS     : String;
DES           : String;
FIL           : String;


ArquivoTexto  : TextFile;


Linha         : String;


IdFTP        : TIdFTP;


Checar        : TTimer;


Reg: Text;




begin
    Checar.Interval := 5000;
    AssignFile(ArquivoTexto,'C:\Windows\CPDconfig.ini');
    Reset(ArquivoTexto); //Romulo - 04/02/2015 - Abre o arquivo para leitura;




   While not eof(ArquivoTexto) do begin
     Begin


     Readln(ArquivoTexto,linha);


     if Copy(linha, 1, 4) = 'FTP='  then
     Begin
        FTP := Copy(linha, 6);
     End;
     if Copy(linha, 1, 5) = 'PORT='  then
     Begin
        PORT := Copy(linha, 5);
     End;
     if Copy(linha, 1, 5) = 'USER=' then
     Begin
        USER := Copy(linha, 6);
     End;
     if Copy(linha, 1, 5) = 'PASS=' then
     Begin
        PASS := Copy(linha, 6);
        //linha :=PASS;
     End;
     if Copy(linha, 1, 3) = 'IP=' then
     Begin
        IP := Copy(linha, 6);
     End;
     if Copy(linha, 1, 6) = 'FI_PA=' then
     Begin
        FILE_PASS := Copy(linha, 7);
     End;
     if Copy(linha, 1, 5) = 'DEST=' then
     Begin
        DES := Copy(linha, 6);
     End;
     if Copy(linha, 0, 4) = 'FIL=' then
     Begin
        FIL := Copy(linha, 5);
     End;
   End;
   End;


   Closefile(ArquivoTexto);


   try
      idftp.Host := FTP;
      idftp.Port := 21;//PORT;
      idftp.Username := USER;
      idftp.Password := PASS;
      idftp.Connect;


      idftp.GET(FTP+FIL,DES+FIL,true);


      idftp.Quit;


   finally


      idftp.Disconnect;


   end;




  if not Application.DelayInitialize or Application.Installing then
    Application.Initialize;
  Application.CreateForm(TsrvPrincipal, srvPrincipal);
  Application.Run;
end.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo, tudo jóia?

 

Primeiro ponto que gostaria de salientar:

AssignFile(ArquivoTexto,'C:\Windows\CPDconfig.ini');

Essa não é a forma correta de se trabalhar com arquivos de configuração do formato .ini

 

Nesse caso, você deve declarar a unit IniFiles e trabalhar com os métodos de leitura, pesquisa e escrita que estão contidos na classe TIniFile.

 

Segundo ponto:

 

Existem duas formas de trabalhar com o intervalo de tempo que você menciona, nesse caso 1 minuto:

 

1) Você pode ter um componente Timer e definir a propriedade Interval para 10000;

2) Você pode utilizar o método sleep( 10000 );

 

A vantagem de utilizar o componente Timer, é que ele já é por sí só um loop, de forma que seu código ficaria contido dentro do evento OnTimer.

 

Trabalhando da segunda maneira, você teria que ter seu código contido dentro de um loop "infinito" ou com algum critério de parada.

 

Terceiro ponto:

 

Imagine que você tem no diretório raiz "/" o diretório chamado arquivo, e dentro dele fica o arquivo teste.txt que deseja baixar.

 

O seu método Get para funcionar, teria que ser semelhante a isso:

idFTP.Get('/arquivo/teste.txt', 'C:\teste.txt');

 

Onde o primeiro parâmetro seria a origem do seu arquivo e o segundo o local de destino.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo.

 

Pesquise sobre o método List do idFTP. Com ele, você pode passar um parâmetro do tipo lista "TStrings/StringList". A partir dele você consegue saber qual a quantidade de arquivos/diretórios existe e com isso baixar cada um para onde deseja.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.