Page 1 of 1

Bajar Archivos FTP mostrando barra de avance (Solucionado)

Posted: Tue Oct 08, 2013 4:46 am
by cuatecatl82
Saludos y buenas noches al foro:

Estoy trabajando con archivos alojados en Servidores FTP, puedo conectarme mostrar y bajar los archivos, pero me gustaría mostrar el avance de la descarga usando barra de progreso de la clase TProgress, tambien probe con la DATA oFtp:exGauge pero no pude hacerla funcionar, tengo el siguiente Código:

Code: Select all

FUNCTION Actualizar(aArchivs,oFTP)

STATIC oFtp

LOCAL oDlg,oBrw,oIco,oCur,oProg,oSay
LOCAL aFiles

oFtp := ServicesFTP():New( cDir,cUsr,cPas,.T.,3000,VAL(cPor) )

      DEFINE ICON    oIco          RESOURCE  "19"
      DEFINE CURSOR  oCur          RESOURCE  "FLECHA"
      DEFINE DIALOG  oDlg          RESOURCE  "ACTUALIZA"     ICON oIco TITLE "Archivos Actualizados."   
    REDEFINE xBROWSE oBrw ID 101 OF oDlg 
    REDEFINE SAY     oSay ID 102 OF oDlg
    
    oProg:= TProgress() :REDEFINE(103,oDlg)
        
    oBrw:SetArray(aArchivs, .T., 1)
    oBrw:l2007               := .T.
    oBrw:nMarqueeStyle       := 7
    oBrw:lFooter             := .F.
    oBrw:lHScroll            := .F.
    oBrw:lVScroll            := .F.
    oBrw:nColDividerStyle    := LINESTYLE_NOLINES
    oBrw:nRowDividerStyle    := LINESTYLE_NOLINES
    oBrw:nRowHeight          := 20
    oBrw:lAllowColSwapping   := .F.
    oBrw:lMultiSelect        := .F.
    oBrw:lColDividerComplete := .T.
    oBrw:oFont               := oApp:FontTaB11
    
    oBrw:aCols[1]:cHeader       := "Archivo"
    oBrw:aCols[1]:nDataStrAlign := 3
    oBrw:aCols[1]:nHeadStrAlign := 2
    oBrw:aCols[1]:nWidth        := 99
               
    oBrw:aCols[2]:cHeader       := "Tamaño"
    oBrw:aCols[2]:nDataStrAlign := 3
    oBrw:aCols[2]:nHeadStrAlign := 2
    oBrw:aCols[2]:nWidth        := 80
    
    oBrw:aCols[3]:cHeader       := "Fecha"
    oBrw:aCols[3]:nDataStrAlign := 3
    oBrw:aCols[3]:nHeadStrAlign := 2
    oBrw:aCols[3]:nWidth        := 85
           
    oBrw:aCols[4]:cHeader       := "Hora"
    oBrw:aCols[4]:nDataStrAlign := 3
    oBrw:aCols[4]:nHeadStrAlign := 2
    oBrw:aCols[4]:nWidth        := 80

    oProg:oCursor               := oCur
    oProg:SetRange( 00, 99 )
    oProg:SETPOS(0)
        
    oSay:oCursor                := oCur
    oSay:oFont                  := oApp:FontTaB11
    oSay:SetText("Bytes copiados:  0 Bytes")
  
    oDlg:lHelpIcon:= .F.
    oDlg:oCursor:= oCur
    oDlg:bStart:=    {|| DownFils(aArchivs,oSay,oProg) }
    
                                             
    ACTIVATE DIALOG  oDlg CENTERED
     
     
RETURN Nil


//-----------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION DownFils(aArchivs,oSay,oProg)

LOCAL nFiles,cFile,nTotal
LOCAL cFileMsg:= ""
LOCAL cDestino:= oApp:cDirApp+"TMP"

IF !lIsDir(cDestino)
    lMkDir(cDestino)
ENDIF


oFtp:oFtp:Cwd(oFtp:GetPath())
      
      FOR nFiles:= 1 TO LEN(aArchivs)
          cFile:= RTRIM(aArchivs[nFiles,1])
          nTotal:= aArchivs[nFiles,5]
          oFtp:exGauge:= ( ShowGauge(nTotal, cFile, oSay) )     //-> Aki me pierdo..
          oFtp:oFtp:DownLoadFile( cDestino + "\" + cFile, cFile )
          SysRefresh()

      NEXT
      

FOR nFiles:= 1 TO LEN(aArchivs)
    cFile:= RTRIM(aArchivs[nFiles,1])
    FERASE(cDestino + "\" + cFile)
NEXT
      
lRMDir(cDestino)
      
RETURN Nil
Intente tambien así pero tampoco funciona.

IF ! Empty( ::exGauge )
hb_ExecFromArray( ::exGauge, { nSent, nSize, Self } )
ENDIF


Image


Es posible mostrar la barra de progreso que avance mientras se descarga el archivo, y saber cuentos bytes han descargado para mosrtarlo en el say, ¿Cómo hacerlo..? No encontre un ejemplo funcional en el foro.

Maestro Antonio: ojala que pueda leer mi mensaje.


Gracias de antemano. :oops: :oops: :oops:

Re: Bajar Archivos FTP mostrando barra de avance

Posted: Tue Oct 08, 2013 11:39 am
by TecniSoftware
Aca tienes un ejemplo de Enrico Maria Giordano http://forums.fivetechsupport.com/viewt ... ILE#p47913

Busca sus post sobre el uso de FTP porque los he probado y funcioan de maravilla.

Saludos

Re: Bajar Archivos FTP mostrando barra de avance

Posted: Tue Oct 08, 2013 2:10 pm
by cuatecatl82
Gracias Alejandro:

Lo he solucionado de esta manera:

Image

Code: Select all

//-----------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION DownFils(aArchivs)

LOCAL nFiles,cFile,nTotal
LOCAL cFileMsg:= ""
LOCAL cDestino:= oApp:cDirApp+"TMP"

IF !lIsDir(cDestino)
    lMkDir(cDestino)
ENDIF


oFtp:oFtp:Cwd(oFtp:GetPath())
      
      FOR nFiles:= 1 TO LEN(aArchivs)
          cFile:= RTRIM(aArchivs[nFiles,1])
          nTotal:= aArchivs[nFiles,5]
          oFtp:oFtp:exGauge := ( @FtpProgress() )
          oFtp:oFtp:DownLoadFile( cDestino + "\" + cFile, cFile )
          SysRefresh()
      NEXT
      
MSGStop("Descarga terminada")
FOR nFiles:= 1 TO LEN(aArchivs)
    cFile:= RTRIM(aArchivs[nFiles,1])
    FERASE(cDestino + "\" + cFile)
NEXT
      
lRMDir(cDestino)
      
RETURN Nil
 



//-----------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION FtpProgress(nSent, nTotal, oFtp)

LOCAL cProgress := INT( 100*nSent/nTotal )

   oProg:SETPOS(cProgress)
   oProg:Refresh() 
   oSayP:SetText("Descargando: "+fFormat(nSent,.T.)+"    Progreso: "+ALLTRIM(STRZERO(cProgress,3)) +" % ")
   oSayP:Refresh()
   SysRefresh()

RETURN Nil

La magia ocurre cuando se llama a exGauge de esta manera:
oFtp:oFtp:exGauge := ( @FtpProgress() )
y no como esta documentado:
oFtp:exGauge := ( @FtpProgress() )
Gracias..