ftp 的api函数好像就是几个
第一步打开
第二步联接
第三步设置路径
第四步.....
如果非要放在一起那就把这几步放在一个模块中的一个函数中Public Function getftpfile(IPaddress As String, username As String, password As String, filepath As String _
                                , filename As String, localpath As String, localfilename As String) As Boolean
    Dim buff1 As String, buff2 As String
    Dim num As Long
    canc = False
    buff1 = Space$(64): buff2 = Space$(128)
    hInter = InternetOpen("wydrwtedr", 4, vbNullString, vbNullString, 0)
    hInterSi = InternetConnect(hInter, IPaddress, 21, username, password, 1, 0, 0)
    FtpSetCurrentDirectory hInterSi, filepath
    FtpGetFile hInterSi, filename, localpath & "\" & localfilename, 1, 0
    getftpfile = True
End Function
'=======================下面是用到的API函数=====================
Option Explicit
Public Declare Function FtpGetFile Lib "WinInet" Alias "FtpGetFileA" _
(ByVal hFtpSessions As Long, ByVal lpszRemoteFile As String, ByVal _
  lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal _
  dwLocalFlagAndAttributes As Long, ByVal dwInternetFlags As Long, _
  ByVal dwContext As Long) As Long
  
Public Declare Function InternetOpen Lib "WinInet" Alias "InternetOpenA" _
(ByVal lpszAgent As String, ByVal dwAccessType As Long, ByVal lpszProxyName _
As String, ByVal lpszProxyBypass As String, ByVal dwFlags As Long) As LongPublic Declare Function InternetConnect Lib "WinInet" Alias "InternetConnectA" _
(ByVal hInternetSession As Long, ByVal lpszServerName As String, ByVal nServerPort _
As Integer, ByVal lpszUsername As String, ByVal lpszPassword As String, ByVal _
dwService As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As LongPublic Declare Function InternetCloseHandle Lib "WinInet" _
Alias "InternetCloseHandleA" (ByVal hInet As Long) As LongPublic Declare Function InternetGetLastResponseInfo Lib "WinInet" _
Alias "InternetGetLastResponseInfoA" (ByRef lpdwError As Long, _
ByVal lpszBuffer As String, ByRef lpdwBufferLength As Long) As BooleanPublic Declare Function FtpPutFile Lib "WinInet" Alias "FtpPutFileA" _
(ByVal hFtpSession As Long, ByVal lpszLocalFile As String, ByVal lpszNewRemoteFile _
As String, ByVal dwFlags As Long, ByVal dwContext As Long) As BooleanPublic Declare Function GetLastError Lib "kernel32" () As LongPublic Declare Function FtpGetCurrentDirectory Lib "WinInet" Alias _
"FtpGetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszCurrentDirectoty _
 As String, ByRef lpdwCurrentDirectory As Long) As LongPublic Declare Function FtpSetCurrentDirectory Lib "WinInet" Alias _
"FtpSetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory _
As String) As BooleanPublic Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _
"RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions _
As Long, ByVal samDesired As Long, phkResult As Long) As LongPublic Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Public Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As Long, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
Public Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Public Const REG_SZ = 1
Public Const REG_BINARY = 3
Public Const REG_DWORD = 4Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
Public Const HKEY_PERFORMANCE_DATA = &H80000004
Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_DYN_DATA = &H80000006Public Const REG_CREATED_NEW_KEY = &H1
Public Const REG_OPENED_EXISTING_KEY = &H2
Public ftpvr As Integer
Public firRun As Boolean

解决方案 »

  1.   

    UsageMsgBox DownloadFile("http://www.vbworld.com", "c:\vbworld.htm")
    CodePrivate 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 LongPublic Function DownloadFile(URL As String, _
        LocalFilename As String) As Boolean    Dim lngRetVal As Long
        
        lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
        
        If lngRetVal = 0 Then DownloadFile = TrueEnd Function
      

  2.   

    用winsock
    Option ExplicitDim stp As Long
    Dim size As Long
    Dim user As String
    Dim passwd As String
    Dim wantfile As String
    Dim saveto As StringPrivate Sub Form_Load()
    Winsock1.RemoteHost = "polar.wwb.noaa.gov" '指定连接主机
    Winsock1.RemotePort = 21 '指定连接端口,FTP默认端口为23
    user = "anonymous" '指定用户名"
    passwd = "IEUser@" '指定密码
    wantfile = "pub/waves/latest_run/nww3.all.grb" '指定想获取的文件
    saveto = "c:\windows\desktop\nww3.all.grb" '指定保存地址Winsock1.Connect
    End SubPrivate Sub Winsock1_Connect()
    stp = 0
    Debug.Print "已连接,正在登陆..."
    End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim a As String
    Winsock1.GetData aSelect Case stp
    Case 0
    If Left(a, 4) = "220 " Then
    Winsock1.SendData "USER " & user & vbCrLf
    stp = 1
    End If
    Case 1
    If Left(a, 4) = "331 " Then
    Winsock1.SendData "PASS " & passwd & vbCrLf
    stp = 2
    End If
    Case 2
    If Left(a, 4) = "230 " Then
    Debug.Print "登陆成功!"
    Winsock1.SendData "TYPE I" & vbCrLf
    stp = 3
    End If
    Case 3
    If Left(a, 4) = "200 " Then
    Winsock1.SendData "PASV" & vbCrLf
    stp = 4
    End If
    Case 4
    If Left(a, 4) = "227 " Then
    Winsock2.RemoteHost = Winsock1.RemoteHostIP
    Winsock2.RemotePort = GetPort(a)
    Winsock2.Connect
    stp = 5
    End If
    Case 5
    If Left(a, 4) = "213 " And Right(a, 2) = vbCrLf Then
    size = Val(Right(a, Len(a) - InStr(a, " ") + 1))
    Debug.Print "文件大小:"; size
    Debug.Print "保存到:"; saveto
    Open saveto For Binary As #1
    Winsock1.SendData "RETR " & wantfile & vbCrLf
    stp = 6
    End If
    Case 6
    If Left(a, 4) = "150 " Then Debug.Print "正在接收文件..."
    End SelectEnd Sub
    Private Sub Winsock2_Connect()
    Winsock1.SendData "SIZE /" & wantfile & vbCrLf
    End SubPrivate Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
    Dim f() As Byte
    Winsock2.GetData f
    If size - LOF(1) < UBound(f) - LBound(f) + 1 Then
    ReDim Preserve f(LBound(f) + (size - LOF(1)))
    Put 1, , f
    Close
    stp = 5
    Winsock1.SendData "BYE " & vbCrLf
    Winsock1.Close
    Winsock2.Close
    Debug.Print "保存完毕!"
    Else
    Put 1, , f
    End If
    End SubPrivate Function GetPort(s As String) As Long
    Dim a As Long, b As Long, temp As Long, temp2 As Long
    temp = InStr(s, ",")
    temp = InStr(temp + 1, s, ",")
    temp = InStr(temp + 1, s, ",")
    temp = InStr(temp + 1, s, ",") + 1
    temp2 = InStr(temp + 1, s, ",") + 1
    a = Val(Mid(s, temp, temp2 - 2))
    b = Val(Mid(s, temp2, InStr(temp2, s, ")") - 1))
    GetPort = a * 256 + b
    End Function
      

  3.   

    Private 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
    Public Function DownloadFile(URL As String, LocalFilename As String) As Boolean
        Dim lngRetVal As Long
        lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
        If lngRetVal = 0 Then DownloadFile = True
    End Function
    Private Sub Form_Load()
        'example by Matthew Gates ([email protected])
        DownloadFile "http://www.allapi.net", "c:\allapi.htm"
    End Sub