FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Bajar Archivos FTP mostrando barra de avance (Solucionado)
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Bajar Archivos FTP mostrando barra de avance (Solucionado)
Posted: Tue Oct 08, 2013 04:46 AM
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 (fw): Select all Collapse
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





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. :-) :-) :-)
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 244
Joined: Fri Oct 28, 2005 06:29 PM
Re: Bajar Archivos FTP mostrando barra de avance
Posted: Tue Oct 08, 2013 11:39 AM
Aca tienes un ejemplo de Enrico Maria Giordano http://forums.fivetechsupport.com/viewtopic.php?f=3&t=9902&hilit=INTERNETwriteFILE#p47913

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

Saludos
Alejandro Cebolido

Buenos Aires, Argentina
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Re: Bajar Archivos FTP mostrando barra de avance
Posted: Tue Oct 08, 2013 02:10 PM
Gracias Alejandro:

Lo he solucionado de esta manera:




Code (fw): Select all Collapse
//-----------------------------------------------------------------------------------------------------------------//
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:exGauge := ( @FtpProgress() )


y no como esta documentado:

oFtp:exGauge := ( @FtpProgress() )


Gracias..
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon

Continue the discussion