Bajar Archivos FTP mostrando barra de avance (Solucionado)

Post Reply
User avatar
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Bajar Archivos FTP mostrando barra de avance (Solucionado)

Post 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:
Last edited by cuatecatl82 on Tue Oct 08, 2013 3:23 pm, edited 1 time in total.
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
User avatar
TecniSoftware
Posts: 213
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Re: Bajar Archivos FTP mostrando barra de avance

Post 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
Alejandro Cebolido
Buenos Aires, Argentina
User avatar
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Re: Bajar Archivos FTP mostrando barra de avance

Post 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..
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
Post Reply