Transferencia de varios arquivos via FTP
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:
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
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:
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
Curtidas 0
Respostas
Watchdogcwb
29/07/2006
será que não existe solução para o meu problema? :(
GOSTEI 0
Massuda
29/07/2006
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......note que você pode incluir um terceiro parametro indicando se Get pode ou não sobreescrever um arquivo no 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;
GOSTEI 0
Watchdogcwb
29/07/2006
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......note que você pode incluir um terceiro parametro indicando se Get pode ou não sobreescrever um arquivo no diretório/pasta local.
procedure Get(const ASourceFile: string; const ADestFile: string; const ACanOverwrite: boolean = false; AResume: Boolean = false); overload;
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
GOSTEI 0
Dmalta
29/07/2006
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.
Um abraço,
procedure List(ADest: TStrings; const ASpecifier: string = ´´; const ADetails: boolean = true);
Um abraço,
GOSTEI 0
Dmalta
29/07/2006
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,
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,
GOSTEI 0