Tengo un módulo de actualizaciones via FTP, puedo revisar los archivos actualizados, bajarlos y remplazar los archivos antíguos, pero quise implementar un boton para detener la descarga de archivos y cancelar el proceso antes de que 1 o todos los archivos se descarguen, si los archivos se descargan completamente se deshabilita el boton para evitar el proceso.
Trabajo con la Clase ServicesFTP de Jose Javier LLoris Roig, la cual hereda los methods de la Clase TFTP de Habour.
Mi idea es mediante una variable lógica si es .T. la descarga continua, si pulso el boton Cancelar la Variable torna a .F. y se cierra el Dialogo.
- Code: Select all Expand view RUN
- REDEFINE BUTTONBMP oBtn ID 500 OF oDlg TEXTRIGHT BITMAP "CANCELAR" ACTION (lDown:= .F., lFinDlg:= .T., oDlg:END())
Y para mostrar el vance de la desgarga:
- Code: Select all Expand view RUN
- oFtp:oFtp:exGauge := ( @FtpProgress() )
oFtp:oFtp:DownLoadFile( cDestino + "\" + cFile, cFile )
La Función que muestra el progreso de la descarga de los archivos y en la cual interrumpo el procesoa con la variable:
- Code: Select all Expand view RUN
- //-----------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION FtpProgress(nSent, nTotal)
LOCAL cProgress := INT( 100*nSent/nTotal )
LOCAL nPos:= 0
IF lDown == .T.
oProg:SETPOS(cProgress)
oProg:Refresh()
oSayP:SetText("Descargando "+cFile+" --> "+STR(nSent)+" Progreso: "+ALLTRIM(STR(cProgress)) +" % ")
oSayP:Refresh()
IF cProgress == 1
nPos:= nPos + 1
ENDIF
oBrw:SETPOS(nPos)
oBrw:Refresh()
SysRefresh()
ELSEIF lDown == .F.
oFTP:CLOSE() //-----Aki el fallo
DeleteObject( oFTP )
ENDIF
RETURN Nil
Sl cancelar el proceso el Dialogo de Cierra y muestra este error:
Time from start: 0 hours 0 mins 12 secs
Error occurred at: 21-10-2013, 10:54:23
Error description: Error BASE/3012 Error de argumento: HB_INETERRORCODE
Args:
[ 1] = U
Stack Calls
===========
Called from: => HB_INETERRORCODE( 0 )
Called from: hbtip\client.prg => TIPCLIENTFTP:INETERRORCODE( 0 )
Called from: hbtip\client.prg => TIPCLIENTFTP:READTOFILE( 0 )
Called from: hbtip\ftpcli.prg => TIPCLIENTFTP:DOWNLOADFILE( 0 )
Called from: Update.prg => DOWNFILS( 271 )
Como puedo parar la conexión al FTP sin que provoque error, ya que despupés del error el archivo continua descargandose de forma escondida... Talvéz la solución sea sencilla pero no doy como..
Ojala puedan darme una ayudadita.. Gracias..