Tengo la necesidad de descargar desde mi aplicación archivos de un servidor via FTP. El código está escrito desde hace 1 año y funcionando (o al menos eso pensaba), pero observo que aleatoriamente hay veces que descarga el archivo con 0kb y por supuesto, al abrirlo, me genera error.
¿Por qué?... Es problema del código? Es problema del servidor?
Gracias.
- Code: Select all Expand view
- oInternet:=tinternet():New()
sysrefresh()
oFtp :=tFtp():New(cServer,oInternet,cUser,cPass)
if !Empty( oFtp:hFtp )
aFiles :=oFtp:Directory(lower(ALLTRIM(actual_CA)+'/*.'+cextension)) && CUIDADO: Se tiene en cuenta las MAYUSC/minusc
if Len(aFiles)>0
SndPlaySound( ".\alarma.wav" )
oText:SetText('Descargando archivo... espere...')
GetFileT( (ALLTRIM(actual_CA)+'/'+carchivo),aFiles[nposi,2],oFtp,carchivo,oText,oDlgj) && descargando archivo con la información de las novedades de la nueva versión a instalar
if file(camino+"\"+carchivo)
CURSORARROW()
ShellExecute(,"open",camino+''+carchivo)
endif
endif
endif
....
FUNCTION GetFileT( cSource,nSize,oFtp,cnamefile,oText,oDlguu ) && para descargar el archivo TXT
LOCAL oFile, hTarget, lValRet:=.F.
LOCAL nBufSize,cBuffer,nBytes, nTotal:=0,nFile:=0
nBufSize:=4096
cBuffer:=Space(nBufSize)
hTarget := FCreate(camino+''+cnamefile)
oFile := tFtpFile():New( cSource, oFtp )
oFile:OpenRead()
WHILE ( nBytes := Len( cBuffer := oFile:Read( nBufSize ) ) ) > 0
FWrite( hTarget, cBuffer, nBytes )
nTotal+=nBytes
oMeter:Set( nTotal )
SysRefresh()
END
FClose( hTarget )
oFile:End()
RETURN nTotal==nSize
NOTA: código obtenido siguiendo las instrucciones de nuestro compañero BIEL Maimó