Sei que já existe alguns tópicos sobre o assunto, mas gostaria de deixar aqui minha versão de uma função postada pelo Toledo no seguinte tópico a alguns anos atrás. https://pctoledo.org/forum/viewto ... =46&t=7587
Estou postando isso para novos usuários e antigos, com as modificações que eu fiz na função. Espero que seja útil para alguém.
Tentei comentar o máximo para facilitar o uso da função.
Código: Selecionar todos
// =============================================================================
Function Donwload_Auto() // Realiza download de atualização via ftp
// =============================================================================
local cFile, aExtract:={}, versaoInstalada, novaVersao
ftpproto ="ftp://"
ftpserver = "" //endereço de FTP do site
ftpuser = "" //Usuário da conta FTP
ftppass = "" //Senha da conta FTP
curl:=ftpproto+ftpuser+":"+ftppass+"@"+ftpserver // url ftp
oUrl:= turl():new(curl)
oCred:= tIPCredentials()
oFtp:= tipclientftp():NEW(oUrl,,.T.)
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .T.
// Aqui você pega a versão instalada no cliente, no meu caso, ela fica em uma tabela dbf
// já aberta em outro lugar do sistema, deixei de exemplo...
Sele tb // Recupera Identificação da Versão Instalada.
dbSetOrder(1)
dbGoTop()
dbSeek('versao') // procura a versão na tabela
versaoInstalada:=If(Found(),ALLTRIM(tb->versao),' ')
/*
** Pode-se usar um array com o nome dos arquivos a serem baixados do servidor ftp
** caso seja necessário, só fazer algo do tipo:
** for i:=0 to len(aFiles) -> aFiles é o array contendo o nome dos arquivos a serem baixados
** oFtp:DownLoadFile(aFiles[i]) // -> realiza o download de todos os arquivos listados no array
** next i
*/
cFile:="arquivo" // -> arquivo zip contendo programa atualizado
If oFTP:Open() // Abre conexão ftp
oFTP:Cwd("/public_html/atualizacao/update") // informe o diretorio (no servidor ftp) onde está o arquivo versao.txt
If !empty(clista:=oFTP:List())
oFtp:DownLoadFile("update\versao.txt") // baixa o arquivo versão.txt existente na pasta update no servidor ftp
If file("update\versao.txt") // se exister o arquivo,
HAND=FOPEN("update\versao.txt") // abre o arquivo txt
novaVersao=FREADSTR(HAND,4) // pega os primeiros 4 bytes do arquivo e atribui à variável local
FCLOSE(HAND) // fecha arquivo txt
ferase("update\versao.txt") // apaga o arquivo txt de versão baixado do servidor ftp
Else
msgInfo("Erro: Arquivo de versão não encontrado!"+Chr(10)+Chr(13)+ ;
"Verifique sua conexão com a internet e tente novamente!", "Atenção!")
return nil
EndIf
oFTP:Cwd("/public_html/atualizacao") // informe o diretorio (no site) onde está os arquivos de atualização a serem baixados
If VAL(novaVersao) > VAL(versaoInstalada) // verefica se tem versão disponivel
If MsgYesNo("Há uma nova versão do sistema disponível, deseja atualizar agora ?")
If !empty(clista:=oFTP:List()) // Verifica se realmente existe arquivos no servidor
oFtp:DownLoadFile(cFile) // realiza download dos arquivos
dbSeek('versao') // Grava nova versão na tabela dbf
If Found()
If ! RDREC() ; Return ; EndIf
Replace versao With novaVersao
dbCommit() ; dbUnlock()
EndIf
msgInfo("Software atualizado da versão: "+versaoInstalada+" para a versão: "+novaVersao)
EndIf
EndIf
EndIf
oFTP:Close() // -> encerra conexão com servidor ftp
EndIf
Else
msgInfo("Error ao tentar conectar no servidor de atualização,"+Chr(10)+Chr(13)+ ;
"por favor verifique sua conexção com a internet!", "Atenção!")
EndIf
Return
Cisino Junior. Estudante de Sistemas de Informação.
HMG 3.4.3 + DBF + Java + MySQL + PHP + JavaScript + HTML5 + CSS3 + Unity(C#)


