Page 1 of 1

Recibir varios ficheros mediante ftp

Posted: Wed Jan 17, 2007 12:12 am
by JoseLuis
Hola amigos
Quiero utilizar ésta función para bajarme ficheros via ftp

Code: Select all

#include "fivewin.ch" 
memvar publicas
Function Mandaf() 
Local oInternet, oFtp, cServFtp:="xxxx.com",cUserFTp:="xxxxxx",cPassFtp:="xxxxxx" 
local asource:={"/html/recepcion/"}
local aTarget:={Publicas:cUnidad}
local osay

oInternet := TInternet():New() 
oFTP := TFTP():New( Alltrim(cServFtp), oInternet, Alltrim(cUserFtp),Alltrim(cPassFtp) ) 

If ! Empty( oFTP:hFTP ) 
FtpGetFiles( aSource, aTarget, oFTP, oSay)
Endif 
oInternet:End() 
Return (nil) 

Function FtpGetFiles( aSource, aTarget, oFTP, oSay)
Local nBufSize:=4096 
local n 
local hTarget 
local cBuffer := Space( nBufSize ) 
local nBytes, nFile := 0, nTotal := 0 
local nTotSize := 0 ,fic
local oFile, aFiles, aSizes := {} 
local nomfich:={}
for n = 1 to Len( aSource ) 
aFiles = oFTP:Directory( aSource[ n ] ) 
AEval( aFiles, { | aFile | AAdd(nomfich, aFile[ n ] ) } )
if Len( aFiles ) > 0 
AAdd( aSizes, aFiles[ 1 ][ 2 ] ) // first file, size 
nTotSize += ATail( aSizes ) 
else 
AAdd( aSizes, 0 ) 
endif 
SysRefresh() 
next 
nFile := 0 
for n = 1 to Len( aSource ) 
hTarget = FCreate( aTarget[ n ]+nomfich[n])
oFile = TFtpFile():New( aSource[ n ], oFTP ) 
oFile:OpenRead() 
SysRefresh() 
while ( nBytes := Len( cBuffer := oFile:Read( nBufSize ) ) ) > 0 
FWrite( hTarget, cBuffer, nBytes ) 
msgwait ("- Recibiendo :"+Str(nFile+=nBytes)+" de "+Str(nTotSize)) 
SysRefresh() 
end 
FClose( hTarget ) 
oFile:End() 
next 
return nil 
Y me ocurre que sólo me baja un fichero, y además con unos bytes que no corresponden, total que es ilegible.
Todos los ejemplos que he visto de ftp vienen para bajarse unos fiheros determinados, pero yo lo que quiero es que me baje todos los ficheros que haya en el ftp, y ahí es cuando me lío.

A ver si alguien me ayuda

Saludos

Jose Luis

Posted: Wed Jan 17, 2007 6:37 pm
by JoseLuis
Me ayudo a mi mismo,
Era un problema del array, que cargaba con oFtp:Directory(), no me acordaba de devuelve el nombre del fichero, y la longitud.

Saludos

Jose Luis