Verificar existencia de um arquivo no servidor FTP

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

Moderador: Moderadores

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

Verificar existencia de um arquivo no servidor FTP

Mensagem por marcos.gurupi »

Caros, como faco para verificar a existencia de um arquivo no servidor FTP?

Equivalente ao IF FILE()


Marcos Roberto

NOTA: Parabens ao PCTOLEDO ficou muito bom o novo modelo do forum, n eh por acaso que eh o principal forum em xbase.
Marcos Roberto
NetService Software
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Verificar existencia de um arquivo no servidor FTP

Mensagem por sygecom »

Olá Marcos,

Eu faço conforme esta abaixo:

Código: Selecionar todos

Donwload_File("/www/atualiza/sistema/bin","sistema.exe","update\sistema.EXE")

***********************************************
Function Donwload_File(ftpdir,ftpfile,fdestino)
***********************************************
Private oBar,oDlg,oFont,nSize
PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -20

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())
       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
      IF vBaixa="S"
         Fim_Run()
         IF MsgYesNo("Há uma Nova Atualização Disponivel, deseja Atualizar Agora ?")
            Aguarde()

            cTamanho:=Tamanho_File(clista,ftpfile)
            Inicia_Progress(fdestino,cTamanho,ftpfile)

            oDlg:Close()
            fclose(janela2)
            fclose(arq)
            ferase(arq)
         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

*************************************
Function Tamanho_File(clista,ftpfile)
*************************************
GERAFILE()
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

*************************************************
Function Inicia_Progress(fdestino,wTotal,ftpfile)
*************************************************
oFtp:exGauge := { | done, size| ShowGauge(done, size, wTotal, ftpfile ) }
oFtp:DownLoadFile(fdestino)

Procedure ShowGauge( nSent, nSize, wTotal, ftpfile )
IF nSent > 0
   eval( {||oBar:Set(,(nSent/wTotal)*100),.t.} )
   @ 50,120 say "Arquivo...: " +ftpfile+" "+ STR(nSent)+" Byts de: " + str(wTotal)+ " Byts "+str((nSent/wTotal)*100) +" %" SIZE 500,22;
   COLOR x_BLUE
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...Baixando Atualização..." size 300,40 Font oFont
@ 50,60 PROGRESSBAR oBar OF oDlg SIZE 510,50 BARWIDTH 10000
oDlg:Activate(.t.)
Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder