ERRO AO COPIAR ARQS 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 ?
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 ?
Etspaz
Curtidas 0
Respostas
Vmlima
10/06/2009
Caro colega
Realmente não será possível utilizaro * para salvar seu arquivo.
Isso por que não se pode criar arquivo nomando-o com este simbolo.
Como se vc fosse alterar o nome de um arquivo qualquer para
por exemplo texto*.txt, este nome é inválido.
Tente usar o nome real do arquivo a ser copiado,
Att,
PS. terá realmente que colocar um nome valido para gravar
Realmente não será possível utilizaro * para salvar seu arquivo.
Isso por que não se pode criar arquivo nomando-o com este simbolo.
Como se vc fosse alterar o nome de um arquivo qualquer para
por exemplo texto*.txt, este nome é inválido.
Tente usar o nome real do arquivo a ser copiado,
Att,
PS. terá realmente que colocar um nome valido para gravar
GOSTEI 0
Etspaz
10/06/2009
Tente usar o nome real do arquivo a ser copiado
O PROBLEMA É QUE NÃO USO PARA GRAVAR, ELE COPIA COM O NOME ORIGINAL.
SÓ QUE USO PARA FILTRAR:
AQUI PASSO O NOME DO ARQUIVO A SER PESQUISADO
NO SCRIPT FUNCIONA A CONSULTA COM O *, MASD NO INDY NÃO,POR ISSO ACHO QUE É NO INDY O PROBLEMA.
GOSTEI 0
Etspaz
10/06/2009
JÁ DESCOBRI QUE ESTAVA FAZENDO ERRADO, QUANDO PASSAVA:
ELE ESTAVA REALMENTE TENTANDO ESCREVER COM O *, VC 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 );
IdFTP1.get(´/DIR_FTP/´+arq [x],DIR_LOCAL\´+ arqs[x],true );
ELE ESTAVA REALMENTE TENTANDO ESCREVER COM O *, VC 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 );
GOSTEI 0
Etspaz
10/06/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?
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?
GOSTEI 0