Publicidade

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

etspaz

[Resolvido] Erro ao copiar arquivo do FTP

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 ?

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 );

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dê uma olhada neste tópico. Acho que a partir dele você pode conseguir adaptar para resolver seu problema.

 

[]'s

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites