VBA Excel: FTP GetFile via WinINet

删除回忆录丶 提交于 2020-06-28 00:45:51

问题


I am trying to get an FTP Download operation to work with VBA Excel (on Excel 2013 x64, Windows 7 SP1 x64). I found some code that maps to the WinInet API and I can successfully upload files using the PutFile function but I am looking to get a GetFile function to work as well.

To get working what I have so far, I used the following: second answer here, and this link. I've been mostly using the second answer from SO to get PutFile to work. I had to make some changes to the original code to make it compatible with 32 bit and 64 bit systems.

You can see my progress here.

What I am looking to do is make an easy to use Sub that calls this declaration:

Private Declare Function FtpGetFile Lib "WinInet" Alias "FtpGetFileA" (ByVal hFtp As Long, ByVal lpszRemoteFile As String, ByVal lpszNewFile As String, ByVal fFailIfExists As Long, ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long

I.E. a Sub like this:

Public Sub GetFile(RemoteFilename As String, LocalFilename As String)
    If FtpGetFile(' what arguments do I put here ') = 0 Then
        Err.Raise vbObjectError + 1, , LastError
    End If
End Sub

I am struggling because I am not very familiar with the WinInet API and am having difficulty parsing the required arguments and what are the appropriate variables to pass for those arguments.


回答1:


This should get you started on the right path, based on the example provided.

In your class module:

Public Sub GetFile(RemoteFilename As String, NewFilename As String)
    If FtpGetFile(m_hFtp, RemoteFilename, NewFilename, False, 0, FTP_TRANSFER_TYPE_BINARY, 0) = 0 Then
        Err.Raise vbObjectError + 1, , LastError
    End If
End Sub

How to call it:

Sub DownloadFile()
    Dim ftp As New CFtp
    ftp.Connect "serverAddress", "username", "password"
    ftp.GetFile "nameOfFileOnServer.txt", "C:\SomePath\nameOfNewFile.txt"
    ftp.Disconnect
End Sub

The parameters specify some attributes to associate with the downloaded file. For example, fFailIfExists is a Boolean that describes whether or not to throw an exception if it is trying to overwrite a local file that already exists. The other flags specify attributes to attach to the file it creates.



来源:https://stackoverflow.com/questions/27455437/vba-excel-ftp-getfile-via-wininet

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!