Transferindo arquivos via ftp pelo delphi
Ola, estou com o seguinte problema.
Estou precisando baixar arquivos via ftp da maquina do usuario, porem se eu faço arquivo por arquivo o arquivo vem sem problemas, mais, se fizer uma rotina para ler todos os arquivos da pasta do ftp o arquivo vem corrompido.
Alguem tem alguma ideia. Segue codigo.
{Procedimento com arquivo perfeito}
Arquivos('Atualizar.exe');//(IdFTP.DirectoryListing[I].FileName);
IdFTP.Get('Atualizar.exe',UVarSys.Config.Ferramentas+'\Atualizar.exe', true);
{Procedimento com arquivo corrompido}
IdFTP.List(ListBox1.Items,'*.exe',False);
i:=0;
if ListBox1.Items.Count > 0 then
Begin
repeat
Arquivos(ListBox1.Items[i]);
Try
IdFTP.Get(ListBox1.Items[i],UVarSys.Config.Ferramentas+'\'+ListBox1.Items[i], true);
Except
Memo.Lines.Add(' Erro ao Baixar Arquivo');
End;
inc(i);
until I = (IdFTP.DirectoryListing.Count);
end;
Obrigado
Estou precisando baixar arquivos via ftp da maquina do usuario, porem se eu faço arquivo por arquivo o arquivo vem sem problemas, mais, se fizer uma rotina para ler todos os arquivos da pasta do ftp o arquivo vem corrompido.
Alguem tem alguma ideia. Segue codigo.
{Procedimento com arquivo perfeito}
Arquivos('Atualizar.exe');//(IdFTP.DirectoryListing[I].FileName);
IdFTP.Get('Atualizar.exe',UVarSys.Config.Ferramentas+'\Atualizar.exe', true);
{Procedimento com arquivo corrompido}
IdFTP.List(ListBox1.Items,'*.exe',False);
i:=0;
if ListBox1.Items.Count > 0 then
Begin
repeat
Arquivos(ListBox1.Items[i]);
Try
IdFTP.Get(ListBox1.Items[i],UVarSys.Config.Ferramentas+'\'+ListBox1.Items[i], true);
Except
Memo.Lines.Add(' Erro ao Baixar Arquivo');
End;
inc(i);
until I = (IdFTP.DirectoryListing.Count);
end;
Obrigado
Highsoft Sistemas
Curtidas 0
Respostas
Bruno Leandro
01/02/2013
Ola faz um teste com essas alterações
IdFTP.List(ListBox1.Items,'*.exe',False);
i:=0;
if ListBox1.Items.Count > 0 then
Begin
repeat
Arquivos(ListBox1.Items[i]);
Try
IdFTP.Get(ListBox1.Items[i],UVarSys.Config.Ferramentas+'\'+ListBox1.Items[i], true);
Except
Memo.Lines.Add(' Erro ao Baixar Arquivo');
End;
inc(i);
until I = (ListBox1.Items.Count -1);
end;
IdFTP.List(ListBox1.Items,'*.exe',False);
i:=0;
if ListBox1.Items.Count > 0 then
Begin
repeat
Arquivos(ListBox1.Items[i]);
Try
IdFTP.Get(ListBox1.Items[i],UVarSys.Config.Ferramentas+'\'+ListBox1.Items[i], true);
Except
Memo.Lines.Add(' Erro ao Baixar Arquivo');
End;
inc(i);
until I = (ListBox1.Items.Count -1);
end;
GOSTEI 0
Highsoft Sistemas
01/02/2013
Ola Bruno.
Obrigado pela atenção mais nao deu certo mesmo com aquela linha.
o problema e que os arquivos ficam no formato errado ex:, se for executar o arquivo que foi baixado da a mensagem que nao eh um arquivo win32 valido.
o que mais me deixa louco eh que se eu mando com as duas linhas acima ou senha informando o nome do programa no fonte da certo.
:/
Obrigado pela atenção mais nao deu certo mesmo com aquela linha.
o problema e que os arquivos ficam no formato errado ex:, se for executar o arquivo que foi baixado da a mensagem que nao eh um arquivo win32 valido.
o que mais me deixa louco eh que se eu mando com as duas linhas acima ou senha informando o nome do programa no fonte da certo.
:/
GOSTEI 0
Highsoft Sistemas
01/02/2013
Para vc me entender, o que eu quero, e colocar varios arquivos em um ftp e o usuario baixar, nao quero amarrar o programa no fonte pq assim faltando algum arquivo "dll ou exe, etc" tenho que compilar o programa de novo.
GOSTEI 0
Daniel Santos
01/02/2013
Repeat? fazia tempo que nçao via! use o For
Ja tentou trocar o tipo TransferType para Binary?
Ja tentou trocar o tipo TransferType para Binary?
GOSTEI 0
Bruno Leandro
01/02/2013
Veja se assim é o que voce precisa
IdFTP.List(ListBox1.Items,'*.*',False);
for i := 0 to ListBox1.Items.Count -1 do
begin
if ListBox1.Selected[I] then
begin
Arquivos(ListBox1.Items[i]);
Try
IdFTP.Get(ListBox1.Items[i],UVarSys.Config.Ferramentas+'\'+ListBox1.Items[i], true);
Except
Memo.Lines.Add(' Erro ao Baixar Arquivo');
End;
end;
end;
IdFTP.List(ListBox1.Items,'*.*',False);
for i := 0 to ListBox1.Items.Count -1 do
begin
if ListBox1.Selected[I] then
begin
Arquivos(ListBox1.Items[i]);
Try
IdFTP.Get(ListBox1.Items[i],UVarSys.Config.Ferramentas+'\'+ListBox1.Items[i], true);
Except
Memo.Lines.Add(' Erro ao Baixar Arquivo');
End;
end;
end;
GOSTEI 0
Paulo Oliveira.
01/02/2013
isso aqui resolve seu problema
Ftp.TransferType := ftBinary;
Ftp.TransferType := ftBinary;
GOSTEI 0