Ir para o conteúdo

Publicidade

 Estatísticas do Fórum

  • 0 Usuários ativos

    0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

Cursos Online iMasters
Foto:

[Resolvido] Erro ao copiar arquivo do FTP

  • Por favor, faça o login para responder
6 respostas neste tópico

#1 etspaz

etspaz
  • Membros
  • 110 posts

Postado 10 junho 2009 - 17:38

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 ?

Editado por Chrnos, 10 junho 2009 - 17:48 .
Retirar título de caixa alta

  • 0

#2 Chrnos

Chrnos

    Analista Programador

  • Membros
  • 1.496 posts

Postado 10 junho 2009 - 17:58

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

#3 etspaz

etspaz
  • Membros
  • 110 posts

Postado 10 junho 2009 - 18:05

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

#4 Chrnos

Chrnos

    Analista Programador

  • Membros
  • 1.496 posts

Postado 10 junho 2009 - 18:12

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

[]'s
  • 0

#5 etspaz

etspaz
  • Membros
  • 110 posts

Postado 12 junho 2009 - 10:22

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

#6 Chrnos

Chrnos

    Analista Programador

  • Membros
  • 1.496 posts

Postado 15 junho 2009 - 16:32

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

#7 etspaz

etspaz
  • Membros
  • 110 posts

Postado 03 julho 2009 - 10:14

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




Publicidade

/ins>