Fórum Transferencia de varios arquivos via FTP #326477

29/07/2006

0

Olá Amigos,

Primeiramente quero dar os parabéns ao fórum e aos participantes pelo excelente nível das respostas :D .

Mas vamos ao que interessa...

To começando com o delphi e tenho instalado a versão 7, na qual eu estou criando uma aplicação em FTP baseada no Indy.
Essa aplicação fará o seguinte:

1º Pegará uma variável(data) de um edit no formato DD.MM (Ex: o usuário digita 29.07)
2º Ao clicar no button é feita uma conexão ao servidor de FTP e pega no diretorio correspondente todos os arquivos referentes a data do edit
3º Com os arquivos na estação é feito um teste para verificar se todos os arquivos foram copiados (diariamente o número de arquivos é o mesmo. Ex: 50 arquivos)
4º Se não tem o número total de arquivos ele retorna uma mensagem informando que ainda estão faltando arquivos ou se os arquivos já estão Ok ele faz uma conexão FTP para o outro servidor e coloca os arquivos no seu diretorio correspondente.

procurando nos posts do forum encontrei esse codigo que faz quase oque eu quero mas ele transfere apenas 1 arquivo, já testei ele faz a transferencia do arquivo para o diretorio, mas retorna os erros abaixo:
[img:6b196fd382]http://img.photobucket.com/albums/v321/watchdogcwb/delphi/erro1.jpg[/img:6b196fd382]
[img:6b196fd382]http://img.photobucket.com/albums/v321/watchdogcwb/delphi/erro2.jpg[/img:6b196fd382]

aqui está o código:

var
Form1: TForm1;
dir,line2,name2 : string;
data : string[5];
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin
data:=edit1.Text; // ainda falta implementar essa variavel no codigo
dir:= ´/operacao/´; // caminho dentro do servidor
line2:= ´/operacao/arq2.txt´; // caminho do arquivo a ser enviado
name2:= ´c:\teste\novonome2.udp´; // tem como retirar essa linha já que os arquivos serão enviados para a estação irão com o mesmo nome?

with IdFTP1 do
begin
Username := ´0000000´;
Password := ´0000000´;
Host := 00.00.00.00;
Connect;
ChangeDir(dir); // muda o diretorio
end;

try
IdFTP1.get(line2, name2); // envia o arquivo!
finally
IdFTP1.Disconnect;
end;
end;
end.

alguém pode me indicar como faço a transferencia (FTP --> estação) de todos os arquivos de acordo com a variavel DATA? como eu crio o teste para saber se todos os arquivos foram copiados? e porque está dando o erro já que o arquivo é transferido?


Obrigado
WatchDogCWB


Watchdogcwb

Watchdogcwb

Responder

Posts

31/07/2006

Watchdogcwb

será que não existe solução para o meu problema? :(


Responder

Gostei + 0

31/07/2006

Massuda

Aparentemente seu código está OK. O problema é que você está baixando do servidor um arquivo que já existe no seu diretório/pasta local.

O método TIdFTP.Get é assim definido...
procedure Get(const ASourceFile: string; const ADestFile: string;
  const ACanOverwrite: boolean = false; AResume: Boolean = false); overload;
...note que você pode incluir um terceiro parametro indicando se Get pode ou não sobreescrever um arquivo no diretório/pasta local.


Responder

Gostei + 0

04/08/2006

Watchdogcwb

Aparentemente seu código está OK. O problema é que você está baixando do servidor um arquivo que já existe no seu diretório/pasta local. O método TIdFTP.Get é assim definido...
procedure Get(const ASourceFile: string; const ADestFile: string;
  const ACanOverwrite: boolean = false; AResume: Boolean = false); overload;
...note que você pode incluir um terceiro parametro indicando se Get pode ou não sobreescrever um arquivo no diretório/pasta local.



Obrigado pela ajuda,

Mas oq eu to precisando mesmo é pegar varios arquivos da mesma data nesse ftp e copiar para a minha estação tem alguma idéia de como eu crio esse loop? já que no codigo acima eu consigo copiar apenas um arquivo...


Obrigado


Responder

Gostei + 0

05/08/2006

Dmalta

Use o método [b:b7a56d2d3b]TIdFTP.List[/b:b7a56d2d3b] para popular um TStringList com os nomes dos arquivos disponíveis. Depois percorra a lista e faça [b:b7a56d2d3b]TIdFTP.Get[/b:b7a56d2d3b] de cada arquivo desejado.

procedure List(ADest: TStrings; const ASpecifier: string = ´´; const ADetails: boolean = true);

Um abraço,


Responder

Gostei + 0

05/08/2006

Dmalta

Use a propriedade [b:f9d237669e]DirectoryListing[/b:f9d237669e] para pegar os detalhes dos arquivos disponíveis depois de uma chamada a [b:f9d237669e]Get[/b:f9d237669e]. Por exemplo: DirectoryListing[0].ModifiedDate.

Atenção para a diferença de fuso horário entre a hora da máquina cliente e a hora do servidor, que pode ser diferente.

Um abraço,


Responder

Gostei + 0

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

Aceitar