Tente:cjp escreveu:Meus caros,
Vocês sabem me informar se pela função oftp:Downloadfile() seria possível baixar de uma vez todos os arquivos que estiverem em determinada pasta do FTP?
oFtp:MGET( ,'c:\nome_pasta\' )
Moderador: Moderadores

Tente:cjp escreveu:Meus caros,
Vocês sabem me informar se pela função oftp:Downloadfile() seria possível baixar de uma vez todos os arquivos que estiverem em determinada pasta do FTP?


Post por favor um exemplo completo de como está usando.cjp escreveu:Era exatamente isto que eu queria, meu caro.
Mas, infelizmente, está dando o seguinte erro:
Que isso José, você um cara esperto e sabe que LIB é LIB, ela não não muda o código a cada semana sozinha, você precisa entender o que está fazendo de errado, um grande coisa que a maioria do pessoal comete de erro com FTP são as conexões simultâneas que a maioria dos provedor bloqueia isso, varios já entraram em contato comigo com endereços de links errados, falta de permissão, e sem contar a questão do FTP PASSIVO, PORTA DO FTP,CODIFICAÇÃO UTF8, TSL e etc...JoséQuintas escreveu: É que pelas LIBs do Harbour falha a cada uma ou das semanas, e pelo SOAP nunca.
Código: Selecionar todos
Function recebftp(arqvrec,pasta)
ftpproto ="ftp://" //posthilit">ftp://"
ftpserver = "ftp.inaciocarvalho.com.br" //posthilit">ftp.servidor.com.br" endereço de ="posthilit">FTP</span> do site
ftpuser = "promotor" //Usuário da conta ="posthilit">FTP</span>
ftppass = snhftp //Senha da conta ="posthilit">FTP</span>
curl:=ftpproto+ftpuser+":"+ftppass+"@"+ftpserver
oUrl:= turl():new(curl)
oCred:= tIPCredentials()
oFtp:= tipclientftp():NEW(oUrl,,.T.)
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .T.
IF oFTP:Open()=.f.
usooff="S"
erecftp="nao conectou"
RETURN .F.
endif
if oFTP:Cwd(pasta)=.f. // informe o diretorio (="posthilit">no</span> site) onde está o arquivo EXE que voce vai copiar
erecftp="nao abriu pasta "+pasta
return .f.
endif
if oFtp:DownLoadFile(arqvrec)=.f. //informe o nome do arquivo que você quer baixar
erecftp="nao recebeu arquivo"
return .f.
endif
oFtp:DELE(arqvrec)
oFTP:Close()
Return .t.
Código: Selecionar todos
Function listaftp(pasta)
ftpproto ="ftp://" //posthilit">ftp://"
ftpserver = ftps // posthilit">ftp.servidor.com.br" endere‡o de ="posthilit">FTP</span> do site
ftpuser = "xxx" //Usu rio da conta ="posthilit">FTP</span>
curl:=ftpproto+ftpuser+":"+snhftp+"@"+ftpserver
oUrl:= turl():new(curl)
oCred:= tIPCredentials()
oFtp:= tipclientftp():NEW(oUrl,.T.)
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .T.
pasta=alltrim(pasta)
nTentativas=0
do while .t.
IF oFTP:Open()
exit
else
nTentativas++
@ maxrow()-1,1 clear to maxrow()-1,maxcol()-1
@ maxrow()-1,1 say "Tentando abrir o FTP (listaftp) ("+alltrim(str(nTentativas))+")"
if us="I" .and. (nTentativas=3 .or. nTentativas>8)
tone(261.7,nTentativas)
endif
inkey(20)
if (nTentativas>10 .or. usooff="S")
if val(substr(time(),5,1))>7
mandmail1("","NÆo abriu o FTP no listaftp")
endif
usooff="S"
return .f.
endif
endif
enddo
if !empty(pasta)
nTentativas := 0
oFTP:Cwd( "" )
While oFTP:Cwd(pasta)=.f.
oFTP:pwd()
if us="I"
@ maxrow()-1,1 say "NÆo conseguiu abrir a pasta do FTP; tentando novamente ("+alltrim(str(nTentativas))+")"
?oftp:creply
if nTentativas>6
tone(261.7,nTentativas)
endif
endif
InKey( 11.5 ) // aguarda
nTentativas++
If nTentativas >8
if us="I"
cls
?"Conferir pasta: "+pasta
?"Conferir oFTP:cReply: "+oFTP:cReply
tone(261.7,33)
inkey(10)
endif
if val(substr(time(),5,1))>7
mandmail1("","Conferir pasta no listaftp: "+pasta+"; "+oFTP:cReply)
endif
return .f.
EndIf
EndDo
endif
nTentativas=0
do while .t.
clista:=oFTP:List()
if valtype(clista)="U"
nTentativas++
if us="I" .and. nTentativas>5
@ maxrow()-1,1 clear to maxrow()-1,maxcol()-1
@ maxrow()-1,1 say "Clista est indefinida no listaftp"
tone(261.7,nTentativas-2)
inkey(5)
endif
if nTentativas>7
if val(substr(time(),5,1))>7
mandmail1("","Clista indefinido com valtype")
endif
return .f.
endif
else
exit
endif
enddo
nTentativas=0
nvestr={}
aadd(nvestr,{"nome","C",20,00})
do while .t.
arqbaixa="aq"+substr(time(),4,2)+substr(time(),7,2)
if file(arqbaixa+".dbf")
erase (arqbaixa)+".dbf"
else
bError := ErrorBlock( {|e| Break(e) } )
begin sequence
dbcreate(arqbaixa,nvestr)
recover using e
cMessage := ErrorMessage(e)
logerro()
endsequence
ErrorBlock( bError )
exit
endif
nTentativas++
if nTentativas>50
if val(substr(time(),5,1))>7
mandmail1("","NÆo conseguiu apagar o arqbaixa ("+arqbaixa+") no listaftp; verificar se vai conseguir usar a base adiante",,2)
endif
exit
endif
inkey(1)
enddo
if usebase(arqbaixa,"S")=.t.
dele all
pack
clista=substr(clista,57)
do while .t.
if empty(clista) .or. at("www.ina",clista)=1
exit
endif
nrfinal=at(".",substr(clista,1,10))+3
if at(".",substr(clista,nrfinal,5))=0
append blank
repl nome with substr(clista,1,nrfinal)
else
nrfinal=nrfinal+4
endif
clista=substr(clista,nrfinal+59)
if len(clista)<5
exit
endif
enddo
else
cadativ("Listaftp","NÆo abriu arqbaixa",arqbaixa,0," ",0,0," ")
if val(substr(time(),5,1))>7
mandmail1("","Listaftp nÆo est abrindo a base arqbx")
endif
return .f.
ENDIF
oFTP:cwd( "" )
oFTP:Close()
Return .t.
Código: Selecionar todos
#include "common.ch"
#include "directry.ch"
PROCEDURE MAIN( cMask )
? TRP20FTPEnv( cMask )
RETURN
/**********************************************************************
*
* Static Function TRP20FTPEnv()
*
**********************************************************************/
STATIC FUNCTION TRP20FTPEnv( cCarpeta )
LOCAL aFiles
LOCAL cUrl
LOCAL cStr
LOCAL lRetorno := .T.
LOCAL oUrl
LOCAL oFTP
LOCAL cUser
LOCAL cServer
LOCAL cPassword
LOCAL cFile := ""
cServer := "ftp.xxxxxxx.br" // "ftpserver" /* change ftpserver to the real name or ip of your ftp server */
cUser := "xxxxxxx" // "ftpuser" /* change ftpuser to an valid user on ftpserer */
cPassword := "xxxxxx" // "ftppass" /* change ftppass to an valid password for ftpuser */
cUrl := "ftp://" + cUser + ":" + cPassword + "@" + cServer+":21"
/* Leemos ficheros a enviar */
aFiles := Directory( cCarpeta )
IF Len( aFiles ) > 0
oUrl := tUrl():New( cUrl )
oFTP := tIPClientFtp():New( oUrl, .f. )
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .f.
/* Comprobamos si el usuario contiene una @ para forzar el userid */
IF At( "@", cUser ) > 0
oFTP:oUrl:cServer := cServer
oFTP:oUrl:cUserID := cUser
oFTP:oUrl:cPassword := cPassword
ENDIF
IF oFTP:Open( cUrl )
FOR EACH cFile IN afiles
? "arquivo : " + cFile[ F_NAME ]
IF ! oFtp:UploadFile( cFile[ F_NAME ] )
?? oFtp:UploadFile( cFile[ F_NAME ] )
lRetorno := .F.
EXIT
ELSE
lRetorno := .T.
ENDIF
NEXT
oFTP:Close()
ELSE
cStr := "No se ha podido conectar con el servidor FTP" + " " + oURL:cServer
IF oFTP:SocketCon == NIL
cStr += Chr( 13 ) + Chr( 10 ) + "Conexi¾n no inicializada"
ELSEIF hb_InetErrorCode( oFTP:SocketCon ) == 0
cStr += Chr( 13 ) + Chr( 10 ) + "Respuesta del servidor:" + " " + oFTP:cReply
ELSE
cStr += Chr( 13 ) + Chr( 10 ) + "Error en la conexi¾n:" + " " + hb_InetErrorDesc( oFTP:SocketCon )
ENDIF
? cStr
lRetorno := .F.
ENDIF
ENDIF
RETURN lRetorno