etspaz 0 Denunciar post Postado Junho 10, 2009 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 ? Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Junho 10, 2009 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 Compartilhar este post Link para o post Compartilhar em outros sites
etspaz 0 Denunciar post Postado Junho 10, 2009 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 ); Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Junho 10, 2009 Dê uma olhada neste tópico. Acho que a partir dele você pode conseguir adaptar para resolver seu problema. []'s Compartilhar este post Link para o post Compartilhar em outros sites
etspaz 0 Denunciar post Postado Junho 12, 2009 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; ... o problema é que IdFTP1.List(ListBox1.Items,arqs[x],false) só está funcionando quando encontra e traz os arquivos corretos, mas quando não existe o arquivo dá o erro: 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? Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Junho 15, 2009 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 Compartilhar este post Link para o post Compartilhar em outros sites
etspaz 0 Denunciar post Postado Julho 3, 2009 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. Compartilhar este post Link para o post Compartilhar em outros sites