FTP

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Itamar, eu fiz um usando GAUGE com apenas os tamanhos dos arquivos que vai ser baixado, o quanto já foi baixado e porcentagem de quanto resta para baixar, mas confesso que apanhei para o Progress.... se poder posta a parte do Progress de como vc fez, para ver se me dah uma luz...Obrigado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Mensagem por Mário Isa »

Itamar,
Vc tem algum modelo aí ?
Mário
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Mario se quiser, posso postar um exemplo de Download com HWGUI sem progress.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Mensagem por fladimir »

Leonardo eu tenho interesse em dar uma olhada... e se possível um exemplo com Gauge...

Grato

meu e-mail eh: fladimir_arroyo@yahoo.com.br
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Mensagem por Itamar M. Lins Jr. »

sygecom escreveu:Itamar, eu fiz um usando GAUGE com apenas os tamanhos dos arquivos que vai ser baixado, o quanto já foi baixado e porcentagem de quanto resta para baixar, mas confesso que apanhei para o Progress.... se poder posta a parte do Progress de como vc fez, para ver se me dah uma luz...Obrigado
Ola!

Segue exemplo...

Código: Selecionar todos


************ 
Function FTP
************
*
* 
Local lRet := .f.
Local cServer   := ServerWAN
Local cUser     := "XXXXXX" 
Local cPassword := "XXXXXX" 
Local cDir      := dDados
Local dAno      := str(year(date()),4)
Local cMesItens := dDados+dAno+ '\' + substr(mes(date()),1,3)+'_'+dAno+'.dbf'
Local ArrayFile := { "estoque.dbf", "estoque.cdx", "forneced.dbf",  "forneced.fpt", "forneced.cdx", ;
                     "grupos.dbf", "grupos.cdx", "receber.dbf", "receber.cdx", "caixa.dbf", "caixa.cdx", ;
                     "clientes.dbf", "clientes.fpt", "clientes.cdx", "moviment.dbf", "moviment.cdx", ;
                     "vendedor.dbf", "vendedor.cdx" }

Local curl:= "ftp://" + cUser + ":" + cPassword + "@" + cServer //+ cDir //+ "/" + cFile 

AbreDb('empresa.dbf','em',.t.)
if empty(em->cgc)
   MsgStop('Cadastre o CNPJ da Empresa')
   FechaDb('em')
   return .f.
endif   

oUrl:= tUrl():new(cUrl) 
oCred := tIPCredentials() 
oFtp := TipClientFtp():NEW(oUrl,.t.) 
oFTP : nConnTimeout := 20000 
oFTP : bUsePasv     := .T. 

If AT("@",cUser) > 0 
   oFTP:oUrl:cServer   := cServer
   oFTP:oUrl:cUserId   := cUser
   oFTP:oUrl:cPassword := cPassword
EndIf

Private oBar,oDlg,oFont,nSize
PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -20

IF oFTP:OPen(cUrl) //Connect() 
    //MsgInfo("Sucesso na Conexão em " + oUrl:cServer + CRLF + oURL:cPATH + CRLF + curdir()) 
     Aguarde()
     
     if oFTP:CWD(em->cgc)
     else
        if oFTP:MKD(em->cgc)
          if oFTP:CWD(em->cgc)
          else
             MsgStop('Erro na Mudança de Diretório')
             oDlg:Close()
             return .f.
          endif
        else
          MsgStop('Erro Criando Diretório')
          oDlg:Close()
          return .f.
        endif
     endif   
     
     For n:=1 to 10    
         cFile := dDados + ArrayFile[n]
           //oFTP:exGauge := {| done, size, oConnection | dothing( done, size, oConnection) }

           oFTP:exGauge := { | done, size| ShowGauge(done, size, ArrayFile[n] ) }
        If oFTP:UpLoadFile(cFile)
        else
            MsgInfo( 'Arquivo Não Enviado.' )
        endif
     Next

     if oFTP:CWD(dAno)
     else
        if oFTP:MKD(dAno)
          if oFTP:CWD(dAno)
          else
             MsgStop( 'Erro Mudando de Diretório. Ano.' )
             oDlg:Close()
             oFTP:Close()
             return .f.
          endif
        else
          MsgStop('Erro Criando Diretório. Ano.')
          oDlg:Close()
          oFTP:Close()
          return .f.
        endif
     endif   

    If file(cMesItens)
    
         oFTP:exGauge := { | done, size| ShowGauge(done, size, cMesItens ) }
      If oFTP:UpLoadFile(cMesItens)
      else
         MsgInfo('Arquivo Não Enviado')
      endif
            
         cMesItens := StrTran(cMesItens,'_','S')
         oFTP:exGauge := { | done, size| ShowGauge(done, size, cMesItens ) }
      If oFTP:UpLoadFile(cMesItens)
      else
         MsgInfo('Arquivo Não Enviado')
      endif
      
         cMesItens := StrTran(cMesItens,'.dbf','.cdx')
         oFTP:exGauge := { | done, size| ShowGauge(done, size, cMesItens ) }
      If oFTP:UpLoadFile(cMesItens)
      else
         MsgInfo('Arquivo Não Enviado')
      endif
      
    EndIf
    
    oFTP:CLOSE()
    oDlg:Close()

Else

    cStr := "Não Foi Possível Conectar Com o Servidor FTP " + oURL:cServer
    IF oFTP:SocketCon == NIL
        cStr += CRLF + "Conexão Não Inicializada"
    ELSEIF InetErrorCode( oFTP:SocketCon ) == 0
        cStr += CRLF + "Resposta do Servidor:" + " " + oFTP:cReply
    ELSE
        cStr += CRLF + "Erro na Conexão:" + " " + InetErrorDesc( oFTP:SocketCon )
    ENDIF
    MsgInfo(cStr)
    
ENDIF 

return nil

PROCEDURE ShowGauge( nSent, nSize, cArq )
   IF nSent > 0
      //@6,14 SAY Replicate( Chr(219), 10000 * nSent/nSize )
     eval( {||oBar:Set(,(nSent * 100/nSize)),.t.} )
     rodape(oDlg,1,'Parte: '+transf(nSent,'999,999,999,999') )
   else
     rodape(oDlg,2,'Total: '+transf(nSize,'999,999,999,999') )
     rodape(oDlg,3,'Arquivo: '+cArq )
   ENDIF

RETURN

*****************
Procedure Aguarde
*****************
*
*
INIT DIALOG oDlg TITLE "Atenção !" AT 45,30 SIZE 600,210 NOEXIT STYLE DS_CENTER + WS_VISIBLE
@ 50,20 say "Aguarde Enviando Informações..." size 300,40 Font oFont
@ 50,60 PROGRESSBAR oBar OF oDlg SIZE 510,50 BARWIDTH 10000 //QUANTITY 1

Add status to oDlg parts 200,200,200
oDlg:Activate(.t.)

Saudações
Itamar M. Lins Jr.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Itamar vlw... acabei de postar um exemplo tmb. na sessão HWGUI:
https://pctoledo.org/forum/viewtopic.php?t=7587
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Itamar pode postar a função RODAPE()
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Mensagem por Itamar M. Lins Jr. »

sygecom escreveu:Itamar pode postar a função RODAPE()
`

Saudações
Itamar M. Lins Jr.

Código: Selecionar todos

*********************************
Function rodape(nDlg,nLoc,ctexto)
*********************************
*
*
if valtype(nDlg) = 'U'
   nDlg := HWindow:GetMain()
endif
if Valtype(nLoc) = 'U'
   nLoc := 2
endif
if ValType(cTexto) = 'U'
   cTexto := ""
endif
WriteStatus(  nDlg,nLoc,ctexto)

return .t.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Itamar, Show de bola, vlw....
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Mensagem por marcos.gurupi »

Caro Itamar, a funcao FTP estah funcionando q eh uma beleza agradeco a vc e a o Leonardo, a unica ressalva eh com o ShowGauge(done, size, cMesItens ) q n atualiza o progressbar do aguarde e nem o toolbar. Obrigado

Marcos Roberto.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

mas consegiu saber pq não atualiza? se quiser posso te passar do jeito que estou fazendo...
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Mensagem por marcos.gurupi »

N. Eu n descobri pq n estah atualizando eu testei o seu ShowGauge() e o do Itamar nenhum dos dois estah funcionando aqui.

E vc ainda pergunta c eu quero. Manda ai garotinho. :D

Marcos Roberto.
Editado pela última vez por marcos.gurupi em 26 Mar 2008 14:48, em um total de 1 vez.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

marcos.gurupi escreveu:N. Eu n descobri pq n estah atualizando eu testei o seu ShowGauge() e o do Itamar nenhum dos dois estah funcionando aqui.

Marcos Roberto.
Marcos,
Recentemente passei por um problema assim que em uma hospedagem LINUX o "fileSize(ftpfile)" não pega o tamanho do arquivo, e automaticamente não passa o total para o SHOWGAUGE() então verefique se o seu problema é esse, veja se esta pegando o tamanho total do arquivo a ser baixado. Se não tiver tente com esse abaixo:

Código: Selecionar todos

*************************************
Function Tamanho_File(clista,ftpfile)
*************************************
GERAFILE()  // nome temporario
vARQ:={}
aadd( vARQ, {"SIZE" ,"N",11,0} )
aadd( vARQ, {"CFILE","C",50,0} )
DBcreate(cFILE, vARQ,"RMDBFCDX")

USE (cFILE) ALIAS TMP SHARED
SELE TMP
  FOR i=1 TO MLCOUNT(Clista)-1
      clinha=MEMOLINE(Clista,,i)

      DBAPPEND()
      FIELD->SIZE  := VAL(SUBST(clinha,34,10))
      FIELD->cFILE := SUBST(clinha,56)
  NEXT

  vTamanho=0
  LOCATE FOR UPPER(ALLTRIM(cfile))=UPPER(ALLTRIM(ftpfile))
  IF FOUND()
     vTamanho=SIZE
  ENDIF
  SELE TMP
  USE
RETURN vTamanho
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder