用VB創建FTP組件(get)

基本步驟:

1、用一個InternetOpen調用設置環境。

2、調用InternetConnect 函數與主機連接。

3、調用FtpGetFile 達到文件。

4、關閉第1、2步創建的句柄,用InternetCloseHandle 函數。

現在來仔細看看每一步:

1、通過調用InternetOpen 函數設置環境。下面是VB特定調用這一函數的聲明:


Private 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 Long



  參數sAgent 用來指定調用WinINet 函數的應用程序或實體。爲了達到目的,可以設置FTP控制。



  參數lAccessType 指定我們是直接與某一主機相連還是使用代理服務器相連。如果傳遞值1,就直接與主機連接。如果傳遞3,就通過代理服務器。如果傳遞0,連接時就要基於

HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings下的註冊表數值

ProxyEnable、ProxyServer和 ProxyOverride 。



  我們可以使用參數sProxyName和 sProxyBypass,而不是註冊設置來提供代理服務器和不使用代理服務器的IP地址和名字。列出代理的基本格式是rotocol=protocol://proxy_name:access_port?。例如,要指定Proxy1 上的端口21爲代理服務器,用Ftp=ftp://Proxy1:21?作爲sProxyName。要饒過以ov? 開始的任何主機,sProxyBypass 字符串應爲ov*? 。



  最後,lFlags 用來顯示影響函數結果的不同選擇。在我們的例子中,我們傳遞0。

  所以,不使用代理而打開一個Internet session 時,我們的調用是這樣的:

lngINet = InternetOpen(“FTP Control”, 1, vbNullString, vbNullString, 0)

  如果函數調用失敗,lngINet 爲0。不然,lngINet 就保存在下一步中將要傳遞給InternetConnect

函數的句柄的值。

2、通過調用InternetConnect 函數與主機連接。VB特定調用這一函數的聲明是:

Private 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 Long



  第一個參數hInternetSession 是InternetOpen 調用返回的句柄值。

  sServerName 是我們即將連接的FTP服務器的IP地址或主機名。

  nServerPort 指示與哪一個端口連接。在我們的例子中使用的值爲0,它指示的是默認的端口21。

  sUsername 和 sPassword 分別傳遞用戶名和口令。

  lService 用來指示使用的服務類型,如HTTP, FTP等。通常傳遞值爲1,表示FTP服務。

  如果將x8000000傳遞到 lFlags 參數,連接將使用被動FTP語義。或者,在我們的例子中,傳遞0來使用非被動語義。



  最後,當使用回叫信號時,lContext 用來識別應用程序的前後關係。因爲在我們的例子中不使用回叫信號,所以這個值爲0。



  現在使用匿名的電子郵件用戶名與主機FTP.MICROSOFT.COM 相連接:

lngINetConn = InternetConnect(lngINet, “ftp.microsoft.com”, 0, _

  “anonymous”,”[email protected]”, 1, 0, 0)



  如果函數調用失敗,則lngINetConn 爲0。反之,lngINetConn 就保存在下一步中將傳遞給FtpGetFile 的句柄的值。



3、現在我們已經實現了連接,然後就需要調用FtpGetFile 。這個函數完成從一個FTP服務器上讀取文件並在本地存儲時有關的所有管理功能。VB特定調用這一函數的聲明是:



Private 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 Boolean



  第一個參數hFtpSession 是InternetConnect 調用返回的句柄值。

  lpszRemoteFile和lpszNewFile 分別是FTP服務器上的文件名和將在本地機上創建的文件名。

  fFailIfExists 標誌是0(替換本地文件)或1 (如果本地文件已經存在則取消)。

  dwFlagsAndAttributes 用來指定本地文件的文件屬性。在我們的例子中忽略,只傳遞0。

  dwFlags 參數指定爲1是用ASCII 傳輸文件(A類傳輸方法),指定爲2是用二進制傳輸文件(1類傳輸方法)。由於DIRMAP.TXT 是ASCII 文本文件,我們傳遞值1。

  最後,當使用回叫信號時,lContext 用來識別應用程序前後關係。因爲在我們的例子中不使用回叫信號,所以這個值爲0。

  所以,以下是得到DIRMAP.TXT文件並將其存在 C:/DIRMAP.TXT的調用。如果本地文件已經存在,就覆蓋它。

blnRC = FtpGetFile(lngINetConn, “dirmap.txt”,”c:/dirmap.txt”, 0, 0, 1, 0)

  如果函數調用成功,blnRC爲 True, 反之爲False。

4、現在文件已經被接收,使用InternetCloseHandle 調用來關閉連接和session 句柄。VB特定調用這一函數的聲明是:



Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer.



  如同指明的一樣,此函數只有一個參數hInet,是要關閉或拋棄的句柄的值。因爲InternetConnection 和InternetOpen 中有句柄,就需要調用這個關閉函數兩次。另外因爲InternetConnection 句柄是由InternetOpen 句柄決定的,關閉他們時的順序與創建時相反。

  以下是調用函數:

InternetCloseHandle lngINetConn

InternetCloseHandle lngINet



  用這短短的四步就完成了FTP GET。
 
發佈了1 篇原創文章 · 獲贊 3 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章