Baixar Arquivo em Servidor FTP
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Usuário Ilson:
Boa tarde!
É possível obter o nome de um arquivo no servidor FTP? Se a resposta for positiva, qual o comando utilizar? Seria o mesmo utilizado quando desejamos saber o nome em pastas do computador em uso (Dir(c:/pasta/pasta/arquivo.ext)) ?
Minha necessidade é a seguinte: atualizar um aplicativo em vários clientes, enviando o pacote de instalação para o servidor FTP. Atualmente, este pacote é enviado ao cliente e o aplicativo faz a verificação, em pasta fixa, se existe um arquivo com número de versão diferente da que está em uso, gravada no registro do Windows. Usando a mesma lógica, gostaria de verificar no servidor FTP se existe um arquivo que contém no nome (ex: Versao100999.exe) uma versão com número superior ao da versão em uso. Neste caso seria baixado o pacote e executada a atualização.
Fico grato se puder me ajudar. Abraços.
Suporte:
Olá, Ilson!
Serve o Vba baixar um arquivo, automaticamente, sempre que abrir o aplicativo, para uma pasta local e então analisar este arquivo baixado?
Usuário Ilson:
Olá, Avelino, obrigado por analisar meu pedido. Havia pensado nessa hipótese, porém, o arquivo de instalação é grande e seria demorado baixá-lo, todas as vezes e, na maioria delas, não seria utilizado. Com a sua resposta me ocorreu uma outra saída e, portanto, fico grato se puder informar uma forma rápida de fazer a baixa na forma sugerida.
Abraços e Obrigado.
Suporte:
Ilson, O que eu imaginei foi você usar um arquivo txt. Ao abrir o aplicativo, este pequeno txt é baixado, e nele então, você verifica a necessidade de atualização. Ao sair do aplicativo, esse txt é deletado. Caso necessite atualizar, você baixa de forma automática o aplicativo ou gera mensagem de nova atualização.
Testei aqui com o meu FTP e funcionou com o código abaixo. Tente adaptá-lo para o seu caso.
Public Sub FtpReceber()
Dim vPath As String
Dim vFile As String
Dim vFTPServ As String
Dim fNum As Long
vPath = "e:\redeaccess\avelino"
vFile = "C150928A.TXT" 'nome do arquivo a ser baixado
vFTPServ = "www.redeaccess.com.br" 'Seu servidor
'Montando o comando ftp.exe
fNum = FreeFile()
Open vPath & "\FtpComm.txt" For Output As #fNum
Print #1, "user pastaftp@redeaccess.com.br" 'Usuário
Print #1, "suaSenha" 'Senha
Print #1, "get " & """" & vFile & """" & " " & vPath & "\ftp\" & vFile 'Donwload do FTP
Print #1, "close" 'Fecha conexão
Print #1, "quit" 'Fecha programa FTP
Close
shell "ftp -n -i -g -s:" & vPath & "\FtpComm.txt " & vFTPServ, vbNormalNoFocus
End Sub
Usuário Ilson:
Resolvi e já testei a solução que encontrei para este caso. Em um módulo, criei a seguinte função (o aplicativo funciona no Access 2007 e 2010):
#If VBA7 Then
Public Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
#Else
Public Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
#End If
-----------------------------------------------------------------------------------
Public Function fncDownloadFile(Url As String, LocalFilename As String) As Boolean
Dim lngRetVal As Long
lngRetVal = URLDownloadToFile(0, Url, LocalFilename, 0, 0)
If lngRetVal = 0 Then
If Dir(LocalFilename) <> vbNullString Then
fncDownloadFile = True
End If
End If
End Function
Suporte:
Sucesso Ilson e obrigado pelo feedback!
1 comentário(s) Fabio 20/07/2023 08:36:51 Mestre Avelino, boa tarde. Existe uma forma de o sistema reconhecer que tela do download do FTP já fechou? O que preciso é que o sistema execute uma ação somente após o download do arquivo. |