CSDN找了半天,没发现有完整的代码.自己东拼西凑,终于解决了.写给和我一样的菜鸟.模块FTP.basOption Explicit
Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
                        (ByVal sAgent As String, ByVal LAccessType As Long, ByVal sProxyName As String, _
                        ByVal SProxyBypass As String, ByVal lFlags As Long) As LongPublic Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _
                        (ByVal hInternetSession As Long, ByVal sServerName As String, _
                        ByVal nServerPort As Integer, ByVal sUsername As String, _
                        ByVal sPassword As String, ByVal lService As Long, _
                        ByVal lFlags As Long, ByVal lContext As Long) As LongPublic Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" _
                        (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, _
                        ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, _
                        ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, _
                        ByVal dwContext As Long) As BooleanPublic Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _
                        (ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _
                        ByVal lpszRemoteFile As String, ByVal dwFlags As Long, _
                        ByVal dwContext As Long) As BooleanPublic Declare Function FtpDeleteFile Lib "wininet.dll" Alias "FtpDeleteFileA" _
                        (ByVal hFtpSession As Long, ByVal lpszFileName As String) As BooleanPublic Declare Function FtpRenameFile Lib "wininet.dll" Alias "FtpRenameFileA" _
                        (ByVal hFtpSession As Long, ByVal lpszExsiting As String, ByVal lpszNew As String) As BooleanPublic Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As IntegerPublic Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" _
                        (ByVal hFtpSession As Long, ByVal lpszSearchFile As String, _
                        lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, _
                        ByVal dwContent As Long) As LongPublic Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" _
                        (ByVal HFind As Long, lpvFndData As WIN32_FIND_DATA) As LongPublic Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Public Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As LongPublic Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End TypePublic Type WIN32_FIND_DATA
    dwFilAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * 260
    cAlternate As String * 14
End TypePublic Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
                        "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As LongType OPENFILENAME
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End TypeType SYSTEMTIME ' 16 Bytes
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End TypePublic Function Get_ftp_list()
    Dim pData As WIN32_FIND_DATA
    Dim bRet As Boolean
    Dim strItem As String
    Dim HFind As Long
    Dim InterOpen As Long
    Dim InterConn As Long
    Dim FileDateTime As String
    Dim FileSize As Long    InterOpen = InternetOpen("FTP Control", 1, vbNullString, vbNullString, 0)
    InterConn = InternetConnect(InterOpen, ServerIp, 0, S_username, S_password, 1, 0, 0)    HFind = FtpFindFirstFile(InterConn, "/" + ServerLocalFolder, pData, 0, 0) ' 查找第一个文件或目录    If HFind = 0 Then ' 错误返回0
        MsgBox IIf(Err.LastDllError = 18, "This directory is empty!", Err.Description)
        Exit Function
    End If    strItem = Split(pData.cFileName, "")(0)
    FileDateTime = Change_time(pData.ftLastWriteTime)
    FileSize = pData.nFileSizeLow    Debug.Print strItem
    Debug.Print FileDateTime
    Debug.Print FileSize    '查找 FTP 目录中的下一个文件。
    bRet = True
    Do While bRet
        bRet = InternetFindNextFile(HFind, pData)
        If bRet Then
            strItem = Split(pData.cFileName, "")(0)
            FileDateTime = Change_time(pData.ftLastWriteTime)
            FileSize = pData.nFileSizeLow
            Debug.Print strItem
            Debug.Print FileDateTime
            Debug.Print FileSize
        End If
    Loop
InternetCloseHandle InterConn
InternetCloseHandle InterOpen
End FunctionFunction Change_time(Server_time As FILETIME) As String
    Dim Local_time As SYSTEMTIME
    Dim Server_UTC_time As FILETIME
    FileTimeToLocalFileTime Server_time, Server_UTC_time
    FileTimeToSystemTime Server_UTC_time, Local_time
    Change_time = CStr(Local_time.wYear) + CStr(Local_time.wMonth) + CStr(Local_time.wDay) + CStr(Local_time.wHour) + CStr(Local_time.wMinute)
End Function