Página 1 de 4

Dois Exemplos de FTP - DownLoad

Enviado: 20 Fev 2008 19:20
por sygecom
Exemplo 01(Inicia na surdina, só avisa se tiver nova versão)

Código: Selecionar todos

#include "windows.ch"
#include "guilib.ch"
#include "hwgui.ch"

***********************
Function Baixa_Automatico
***********************
if Inetestaconectada()=.T.  // verefica a conexão com a internet
   StartThread( @Donwload_Auto(),"1.0")  // tem que compilar em MT, para rodar na surdina
endif
Return

****************************
Function Donwload_Auto(vVersao)
****************************
Private vBaixa:="N"
ftpproto ="ftp://"
ftpserver = "ftp.servidor.com.br"
ftpuser = "usuario"
ftppass = "senha"
curl:=ftpproto+ftpuser+":"+ftppass+"@"+ftpserver
oUrl:= turl():new(curl)
oCred:= tIPCredentials()
oFtp:= tipclientftp():NEW(oUrl,,.T.)
oFTP:nConnTimeout := 20000
oFTP:bUsePasv     := .T.
IF oFTP:Open()
   oFTP:Cwd("www/pasta/sistema")     // muda o diretorio no FTP
   IF !empty(clista:=oFTP:List())
      oFtp:DownLoadFile("update\versao.txt") // baixa o arquivo versão.txt dentro da pasta update

      HAND=FOPEN("update\versao.txt")
      VERSAODISP=FREADSTR(HAND,4)       // verefica a versão
      FCLOSE(HAND)
      ferase("update\versao.txt")       // apaga o arquivo baixado

      IF VAL(VERSAODISP) > VAL(vVersao)  // verefica se tem versão disponivel
         IF MsgYesNo("Há uma Nova Atualização Disponivel, deseja Atualizar Agora ?")

            cTamanho:=oFTP:fileSize( "sistema.exe" )
            Inicia_Progress("update\sistema.exe",cTamanho,"sistema.exe")  // mostra o progressp na tela

            IF File("update\sistema.exe")
               Private oDlgHabla:=nil
               MsgRun("Aguarde...Fechando conexão com Servidor..." )
               oFTP:CLOSE()  // fechando conexão com o FTP
               HW_Atualiza_Dialogo("Aguarde...Renomeando Arquivos Baixados..." )
               RenameFile(NomeExecutavel(),"sistema2.exe" )
               HW_Atualiza_Dialogo("Aguarde...Copiando Arquivos Baixados para pasta SISTEMA.." )
               __CopyFile("update\sistema.exe",NomeExecutavel(.t.))
               HW_Atualiza_Dialogo("Aguarde...Limpando arquivos Temporarios..." )
               Ferase("update\sistema.exe")
               MsgInfo("O Sistema vai fechar essa sessão para Validar a atualização","Aviso do Sistema")
               WinExec("SISTEMA.EXE 2",.T.)  // 2=Não verefica se já esta aberto o sistema.
               Fim_Run()
               quit
            Endif
         Endif
      ENDIF
   ENDIF
   oFTP:CLOSE()
ENDIF
Return
Exemplo 02:

Código: Selecionar todos

#include "windows.ch"
#include "guilib.ch"
#include "hwgui.ch"

******************
Function Baixa_Arq
******************
Baixa_Arq2("1.0")

IF File("update\sistema.exe")
   Private oDlgHabla:=nil
   MsgRun("Aguarde...Renomeando Arquivos Baixados..." )
   RenameFile(NomeExecutavel(),"sistema2.exe" )
   HW_Atualiza_Dialogo("Aguarde...Copiando Arquivos Baixados para pasta SISTEMA.." )
   __CopyFile("update\sistema.exe",NomeExecutavel(.t.))
   HW_Atualiza_Dialogo("Aguarde...Limpando arquivos Temporarios..." )
   Ferase("update\sistema.exe")
   MsgInfo("O Sistema vai fechar essa sessão para Validar a atualização","Aviso do Sistema")
   HW_Atualiza_Dialogo("Aguarde...Limpando arquivos Temporarios..." )
   WinExec("sistema.exe 2",.T.)
   Fim_Run()
   quit
ELSE
   IF !FILE("update\Not_Update.txt")
      MsgInfo("Parabéns ! Você Já esta utilizando a versão mais recente do [ SISTEMA ] e portanto não há atualizações disponível.","Aviso do Sistema")
      FERASE("update\Not_Update.txt")
   ELSE
      FERASE("update\Not_Update.txt")
   ENDIF
Endif
Return NIL

***************************
Function Baixa_Arq2(vVERSAO)
***************************
SET DATE BRITISH
SET EPOCH TO 2000
Private oDlgHabla:=nil
MsgRun("Aguarde Vereficando conexão com a Internet..." )

IF Inetestaconectada()=.T.
   Fim_Run()
   IF !FILE("res\buscar.bmp")
      Donwload_File("www/pasta/sistema","buscar.bmp","res\buscar.bmp")
   Endif
   IF !FILE("res\sygecom.bmp")
      Donwload_File("www/pasta/sistema","sygecom.bmp","res\sygecom.bmp")
   Endif
   Donwload_File("www/pasta/sistema","sistema.exe","update\sistema.EXE")
else
   Fim_Run()
   MsgInfo("Não foi possível estabelecer uma conexão com o Servidor,Favor vereficar sua Intenet ou tente mais tarde.","Aviso do Sistema")
Endif
Return
**********************************************
Function Donwload_File(ftpdir,ftpfile,fdestino)
**********************************************
Private oDlgHabla:=nil
MsgRun("Aguarde Procurando Atualizações...")
Private vBaixa:="N"
ftpproto ="ftp://"
ftpserver = "ftp.servidor.com.br"
ftpuser = "usuario"
ftppass = "senha"
curl:=ftpproto+ftpuser+":"+ftppass+"@"+ftpserver
oUrl:= turl():new(curl)
oCred:= tIPCredentials()
oFtp:= tipclientftp():NEW(oUrl,,.T.)
oFTP:nConnTimeout := 20000
oFTP:bUsePasv     := .T.
IF oFTP:Open()
   oFTP:Cwd(ftpdir)     // muda o diretorio
   IF !empty(clista:=oFTP:List())
      IF ftpfile="sistema.exe"
         ferase("update\versao.txt")
         oFtp:DownLoadFile("update\versao.txt")
         oFTP:reset()
         oFtp:DownLoadFile("update\versao.txt")

         HAND=FOPEN("update\versao.txt")
         VERSAODISP=FREADSTR(HAND,4) // Le os 4 primeiros bytes do aquivo baixado
         FCLOSE(HAND)
         ferase("update\versao.txt")

         IF VAL(VERSAODISP) > VAL(vCOMPILA)
            vBaixa="S"
         ENDIF
      else
         vBaixa="S"
      endif
      IF vBaixa="S"
         Fim_Run()
         IF MsgYesNo("Há uma Nova Atualização Disponivel, deseja Atualizar Agora ?")

            cTamanho:=oFTP:fileSize( ftpfile )
            Inicia_Progress(fdestino,cTamanho,ftpfile)
         ELSE
            arq="update\Not_Update.txt"
            if !file(arq)
               arqh=fcreate(arq,0)
               fclose(arqh)
            endif
            rele arq, arqh
         Endif
      ENDIF
   ENDIF
   oFTP:CLOSE()
Else
   MsgInfo("Não foi possivel se conectar ao servidor, Favor tente mais tarde.","Aviso do Sistema")
ENDIF
Fim_Run()
Return
Funções Extras:

Código: Selecionar todos

*************************************************
Function Inicia_Progress(fdestino,wTotal,ftpfile)
*************************************************
Private oDlgHabla:=nil
MsgRun("Conectando, Aguarde...")
oFtp:exGauge := { | done, size| ShowGauge(done, size, wTotal, ftpfile ) }
oFtp:DownLoadFile(fdestino)
Fim_Run()

**************************************************
Function ShowGauge( nSent, nSize, wTotal, ftpfile )
**************************************************
GTprocessmessages()
HW_Atualiza_Dialogo(ftpfile+" "+ STR(nSent)+" Byts de: " + str(wTotal)+ " Byts "+str((nSent/wTotal)*100) +" %" )
Return


FUNCTION MsgRun( cMsg,cTime )
   Local vModal,vMsg:=[Aguarde em processamento....],vMsg2:=[]
   Local oFonte:= oFonte:= HFont():Add( "Arial"     , 0 ,-15,500,255 )
   PRIVATE oTimHabla
   if cMsg#nil
      vMsg:=cMsg
   endif

   INIT DIALOG oDlgHabla ;
   SIZE 485, 80  ;
   STYLE DS_CENTER + WS_VISIBLE ;
   ON INIT { || IniDlgHabla(cTime) } ;
   ON EXIT { || Hw_FimDialogoTemporal(cTime) }

   @ 0, 20  SAY vMsg SIZE 465, 20 STYLE SS_CENTER FONT oFonte

   if ctime=nil
      vModal:=.t.
   endif
   oDlgHabla:Activate(vModal)
Return .T.

static FUNCTION IniDlgHabla(cTime)
oDlgHabla:Center()
if cTime#nil
   SET TIMER oTimHabla OF oDlgHabla ID 9006 VALUE cTime ACTION {|| CierraDialogo() }
endif
Return .T.

FUNCTION Hw_FimDialogoTemporal(cTime)
if cTime#nil
   if oDlgHabla#nil
      oDlgHabla:close()
      oDlgHabla:=nil
   endif
endif
Return .T.

Function Fim_Run()
IF oDlgHabla#NIL
   oDlgHabla:CLOSE()
ENDIF

FUNCTION CierraDialogo()
   EndDialog()
RETURN .T.

FUNCTION HW_Atualiza_Dialogo(vMensagem)
GTprocessmessages()
oDlgHabla:ACONTROLS[1]:SETTEXT(vMensagem)
RETURN NIL

**************************************
Function inetestaconectada( cAddress )
**************************************
LOCAL aHosts
LOCAL cName
InetInit()
IF cAddress == NIL
   cAddress := "www.google.com.br"
ENDIF
aHosts := InetGetHosts( cAddress )
IF aHosts == NIL .or. len(aHosts)=0
   InetCleanup()
   RETURN .f.
endif
InetCleanup()
RETURN .t.
Obs: tem que linkar a TIP.LIB

Enviado: 22 Fev 2008 11:16
por marcos.gurupi
Amigo!!! Como vc adivinhou? Eu estava precisando justamente disso. Vou fazer os testes. Obrigado!

Marcos Roberto.

Enviado: 22 Fev 2008 12:47
por sygecom
Postei pq um colega na sessão xharbour estava querendo, Qualquer coisa prende o grito !

Enviado: 19 Mar 2008 15:04
por marcos.gurupi
Por varios motivos q vcs (programadores) colegas sabem somente hoje eu comecei a testar as funcoes de ftp postadas, mas esta apresentando o seguinte erro logo no inicio:

Error BASE/1066 Argument error: conditional
Called from ftpcln.prg->TIPCLIENTFTP:NEW(116)
Called from PDVNET.PRG->DONWLOAD_FILE(887)
Called from PDVNET.PRG->BAIXA_ARQ2(863)
Called from PDVNET.PRG->(b)MAIN(338)
Called from ->ONCOMMAND(426)
Called from hwindow.prg->(b)HMAINWINDOW(155)
Called from hwindow.prg->HMAINWINDOW:ONEVENT(234)
Called from ->HWG_ACTIVATEMAINWINDOW(0)
Called from hwindow.prg->HMAINWINDOW:ACTIVATE(223)
Called from PDVNET.PRG->MAIN(349)

HwGUI 2.16 xHarbour build 0.99.70 Intl. (SimpLex)
Date:19/03/2008
Time:14:20:18

Enviado: 20 Mar 2008 08:19
por sygecom
marcos.gurupi escreveu:Por varios motivos q vcs (programadores) colegas sabem somente hoje eu comecei a testar as funcoes de ftp postadas, mas esta apresentando o seguinte erro logo no inicio:

Error BASE/1066 Argument error: conditional
Called from ftpcln.prg->TIPCLIENTFTP:NEW(116)
Called from PDVNET.PRG->DONWLOAD_FILE(887)
Called from PDVNET.PRG->BAIXA_ARQ2(863)
Called from PDVNET.PRG->(b)MAIN(338)
Called from ->ONCOMMAND(426)
Called from hwindow.prg->(b)HMAINWINDOW(155)
Called from hwindow.prg->HMAINWINDOW:ONEVENT(234)
Called from ->HWG_ACTIVATEMAINWINDOW(0)
Called from hwindow.prg->HMAINWINDOW:ACTIVATE(223)
Called from PDVNET.PRG->MAIN(349)

HwGUI 2.16 xHarbour build 0.99.70 Intl. (SimpLex)
Date:19/03/2008
Time:14:20:18
O Exemplo acima foi postado para ser usado com xharbour 1.0.0, se queres usar com xharbour 9970, deve alterar a linha "tipclientftp()" por "tipclient()"

Enviado: 25 Mar 2008 11:30
por marcos.gurupi
Quando eu uso o comando cTamanho:=oFTP:fileSize( ftpfile ) ele apresenta o seguinte erro:

Código: Selecionar todos

Error BASE/1004  Message not found: TIPCLIENTFTP:FILESIZE
Called from ->TIPCLIENTFTP:ERROR(179)
Called from tobject.prg->(b)HBOBJECT:HBOBJECT(105)
Called from ->TIPCLIENTFTP:MSGNOTFOUND(0)
Called from ftpcln.prg->TIPCLIENTFTP:FILESIZE(167)
Called from PDVNET.PRG->DONWLOAD_FILE(1094)
Called from PDVNET.PRG->BAIXA_ARQ2(1057)
Called from PDVNET.PRG->(b)MAIN(343)
Called from ->ONCOMMAND(426)
Called from hwindow.prg->(b)HMAINWINDOW(155)
Called from hwindow.prg->HMAINWINDOW:ONEVENT(234)
Called from ->HWG_ACTIVATEMAINWINDOW(0)
Called from hwindow.prg->HMAINWINDOW:ACTIVATE(223)
Called from PDVNET.PRG->MAIN(357)

HwGUI 2.16 xHarbour build 0.99.70 Intl. (SimpLex)
Date:25/03/2008
Time:11:35:48

Enviado: 26 Mar 2008 13:13
por sygecom
O Exemplo acima foi postado para ser usado com xharbour 1.0.0, se queres usar com xharbour 9970, deve alterar a linha "tipclientftp()" por "tipclient()"

Enviado: 26 Mar 2008 14:12
por marcos.gurupi
Caro leonardo a linha jah foi alterada e n ocorre mais erro o erro descrito acima se refere a outro q n saberia explicar o motivo.

A linha alterada anteriormente:

//oFtp:= tipclientftp():NEW(oUrl,,.T.) // xhb 1.0.0
oFtp:= tipclient():NEW(oUrl,,.T.) //xhb 0.99.70

A linha do err atual:

cTamanho:=oFTP:fileSize(ftpFile)

Enviado: 26 Mar 2008 15:21
por sygecom
Que estranho marcos, pq pelo ERRO vc esta uando a TIP.LIB da 1.0.0 . Verefique se a sua TIP.LIB é da versão 9970 !

Re: Dois Exemplos de FTP - DownLoad

Enviado: 30 Dez 2008 14:22
por Mário Isa
Leonardo disse:
StartThread( @Donwload_Auto(),"1.0") // tem que compilar em MT, para rodar na surdina
O que significa MT ?

Mário

Re: Dois Exemplos de FTP - DownLoad

Enviado: 30 Dez 2008 16:27
por Maligno
MultiTarefa.

Dois Exemplos de FTP - DownLoad

Enviado: 06 Jul 2012 01:54
por Abel
Maligno, estou tentado fazer uma rotina para baixar uma EXE do site.
ao testar os exemplos postados da erro de compilacao, talvez porque muitas destas estao para xharbour e nao harbour como estou usando.

Analisando a wapi.exe vi que tem um comando para baixar um arquivo atraves do http, fiz um teste pela linha de comando do msdos e deu certo., minha duvida é se seria possivel compilar junto com harbour alguma parte do fonte evitando assim ter que executar um EXE que pode ser bloqueado por diversos antivirus existentes hoje.

grato pela atencao,
ABEL

Dois Exemplos de FTP - DownLoad

Enviado: 06 Jul 2012 11:43
por Pablo César
Analisando a wapi.exe vi que tem um comando para baixar um arquivo atraves do http, fiz um teste pela linha de comando do msdos e deu certo., minha duvida é se seria possivel compilar junto com harbour alguma parte do fonte evitando assim ter que executar um EXE que pode ser bloqueado por diversos antivirus existentes hoje.
Eu vou te responder pelo Maligno (ele anda meio ausente ultimamente). A biblioteca WAPI.LIB foi desenvolvida para uso exclusivo no Clipper, portanto não daria para ser compilada em Harbour ou xHarbour. O que pode é ser utilizada desde a sua aplicação Harbour ou xHarbour, mandando executar o WAPI.EXE e utilizá-lo como um aplicativo externo, da mesma forma que você fez para executar na linha de comando. O WAPI, possui todos os fontes utilizados, na maioria em linguagem C++, talvez daria para adaptar-lo de forma que você pudesse utilizar as funções em C de dentro da sua aplicação Harbour. Mas isso iria demandar em algumas adaptações em linguagem ANSI (puro C), apesar que aqui no fórum já foi mencionado que é possível utilizar C++ e até mesmo Assembler.

Dois Exemplos de FTP - DownLoad

Enviado: 06 Jul 2012 13:26
por Toledo
Abel escreveu:ao testar os exemplos postados da erro de compilacao, talvez porque muitas destas estao para xharbour e nao harbour como estou usando.
Abel, os exemplos que o Leonardo passou funciona sim com Harbour. Então se você tem acesso ao FTP (conta de FTP, usuário e senha) deste site onde está o arquivo EXE que você quer baixar, você pode usar o exemplo Donwload_Auto() que o Leonardo postou na primeira mensagem deste tópico:

Código: Selecionar todos

Function Donwload_Auto()
****************************
ftpproto ="ftp://"
ftpserver = "ftp.servidor.com.br"  //endereço de FTP do site
ftpuser = "usuario"   //Usuário da conta FTP
ftppass = "senha"    //Senha da conta FTP
curl:=ftpproto+ftpuser+":"+ftppass+"@"+ftpserver
oUrl:= turl():new(curl)
oCred:= tIPCredentials()
oFtp:= tipclientftp():NEW(oUrl,,.T.)
oFTP:nConnTimeout := 20000
oFTP:bUsePasv     := .T.
IF oFTP:Open()
   oFTP:Cwd("www/pasta/sistema")     // informe o diretorio (no site) onde está o arquivo EXE que voce vai copiar
   IF !empty(clista:=oFTP:List())
      oFtp:DownLoadFile("arquivo.exe")  //informe o nome do arquivo que você quer baixar
   ENDIF
   oFTP:Close()
ENDIF
Return
Compile com a lib HBTIP.

Abraços,

Dois Exemplos de FTP - DownLoad

Enviado: 02 Ago 2012 18:12
por cjp
Pessoal, estou testando usar o FTP diretamente de dentro do xHarbour. Pesquisando no fórum, achei este post com este exemplo e fui testar.

Achei ele ótimo, funcionou beleza.

Só precisava saber quais os comandos para colocar arquivo no FTP usando esta função e também para excluir arquivos do FTP.

Alguém poderia me ajudar?