Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
BOA TARDE,
TENHO UM SCRIPT QUE COPIA UNS ARQUIVOS DO FTP: mget TRAFEGO_POS_TO_12_200907*.gz
ESTOU PASSANDO A TAREFA PARA O DELPHI, POIS COM O SCRIPT O USUARIO PRECISA ALTERAR ALGUNS PARAMETROS TODO MES... E NO DELPHI EU PEGO ESSES PARAMETROS NO BANCO;
USANDO O INDY, LISTEI NUM STRINGLIST O NOME DOS ARQUIVOS, MAS TERIA QUE USAR O ASTERISTICO COMO NO USO NO SCRIPT:
arqs.Add('TRAFEGO_POS_'+QR_FTP.FieldByName('UF').AsString+'_'+QR_FTP.FieldByName('CICLO').AsString+'_'+ANO_MES_CICLO+'*'+'.gz');
PARA COPIAR:
for X := 0 to arqs.Count - 1 do
BEGIN
IdFTP1.get('/DIR_FTP/'+arq [x],DIR_LOCAL\'+ arqs[x],true );
END;
MAS DA O ERRO:
First chance exception at $7C812A5B.
Exception class EFCreateError with message
'Cannot create file "D:\Ernesto\Automatizacao_DFAT\Documentos_atuais
\TESTE_SCR_RD\TRAFEGO_POS_AC_12_200906*.gz". A sintaxe do nome do arquivo,
pasta ou nome do volume está incorreta'. Process Project1.exe (2052)
TEM ALGUM JEITO DE USAR O * COM ESTE COMPONENTE ?
JÁ DESCOBRI QUE ESTAVA FAZENDO ERRADO, QUANDO PASSAVA:
Citação:
IdFTP1.get('/DIR_FTP/'+arq [x],DIR_LOCAL\'+ arqs[x],true );
ELE ESTAVA REALMENTE TENTANDO ESCREVER COM O *, você TAVA CERTO.
PORÉM, NÃO SEI COMO PASSAR O NOME COM O * MESMO PARA LISTAR TODOS Q PRECISO, E PEGAR SÓ O NOME REAL DOS ARQUIVOS LISTADOS, PRA DEPOIS MANDAR COPIAR, TIPO:
IdFTP1.get('/DIR_FTP/'+NMREAL,DIR_LOCAL\'+ NMREAL,true );
Dê uma olhada neste tópico. Acho que a partir dele você pode conseguir adaptar para resolver seu problema.
[]'s
Bom dia pessoal,
Problema parcialmente resolvido.
decobri como pesquisar com * no ftp:
vejam:
//pra listar os nomes de arquivos que podem estar no ftp
arqs.Add('TRAFEGO_POS_'+QR_FTP.FieldByName('UF').AsString+'_'+QR_FTP.FieldByName('CICLO').AsString+'_'+ANO_MES_CICLO+'*'+'.gz');
//depois de conectar e seguir ao diretório desejado
//pra listar os arquivos
IdFTP1.List(ListBox1.Items,arqs[x],false);
//se encontrar os arquivos
if ListBox1.Items.Count > 0 then
begin
for indice:=0 to ListBox1.Items.Count -1 do
begin
try
//inicia a transferência do arquivo
IdFTP1.Get(ListBox1.Items.Strings[indice], 'Dir_local\'+ ListBox1.Items.Strings[indice],true);
except
on e:exception do
showmessage(e.Message);
end;
...**First chance exception at $7C812A5B. Exception class EIdReplyRFCError with message 'FECHAMENTO_CICLO_POS_AC_12_200906*.gz: No such file or directory.**
'. Process Project1.exe (5208)
não entendo o q acontece, pois esta função é justamente para listar os q existem e não ter problema de tentar copiar algo q não existe, correto?
Você já experimentou testar se o arqs é diferente de vazio antes de dar o comando IdFTP1.List(ListBox1.Items,arqs[x],false); ? Ou já pensou em usar um try except neste trecho para tratar os possíveis erros?
Provavelmente seu código está dando erro porque a variável arqs está retornando null quando não acha arquivo algum.
[]'s
Bom dia,
Quero informar que o problema não acontece mais.
O que me deixa curioso é que não alterei nada que pudesse influenciar, só mudei o parametro de detalhe do metodo list para true:
IdFTP1.List(ListBox1.Items,arqs[x],true);
isto porque preciso pegar a data de criação e com os detalhes ativados ele me traz esta informação, mas não acredito que isto tenha a ver com o problema.
Agora quando tem o arquivo ele traz e se não tem não acontece nada, aí vem outra função que verifica se todos arquivos do stringlist foram encontrados, se não, gera um txt informando os arquivos que eram pra estar disponiveis e não estão, tá funcionando como eu queria.
etspaz, você está tentando criar um arquivo usando o * como parte do nome dele? Até onde eu sei, o SO não permite isso... já debugou pra ver onde está dando erro?
[]'s