夏妙婧 发表于 2016-6-10 06:44:35

VB.NET中使用FTP下载文件的两种方法

  .net没有专门处理FTP的类,我们可以通过调用系统自带的FTP.EXE 或者是调用win32 API中的wininet.dll来完成基本操作。希望以下的代码能为大家抛砖引玉。
  方法一: 使用Ftp.exe ,通过process类来调用它。
  Imports System.Diagnostics
  ...
  Public Sub GetFileByCallFtp()
  '定义ProcessStartInfo,Process的启动信息。
  Dim psi As New ProcessStartInfo
  'ftp.exe的路径最好放到配置文件里。
  psi.FileName = "C:\WINNT\system32\ftp.exe"
  psi.RedirectStandardInput = False
  psi.RedirectStandardOutput = True
  '该值指示不使用操作系统Shell程序启动进程。
  psi.UseShellExecute = False
  '命令集文件名.注意,路径中不能有空格.
  Dim fileName As String = "C\ftp.txt"
  '-s:FileName表示,从文件中读取控制命令
  psi.Arguments = "-s:" + fileName
  Dim proc As Process
  proc = Process.Start(psi)
  '等待进程完成任务
  proc.WaitForExit()
  '在控制台输出结果
  Console.WriteLine(proc.StandardOutput)
  Console.ReadLine()
  End Sub
  ==============================================================================
  ftp.txt 里的内容
  方法二,使用win32 api —— wininet.dll
  首先是,api声明:
  因为此测试程序,是VB.NET ConsoleApplication所以,api声明写在Module里,
  方法是静态的。所以没加Shared关键字, 这一点请大家注意。
  <DllImport("wininet")> _
Public Function InternetOpen(ByVal sAgent As String, ByVal LAccessType As Integer, ByVal sProxyName As String, _
ByVal SProxyBypass As String, ByVal lFlags As Integer) As Integer
End Function
  <DllImport("wininet")> _
Public Function InternetConnect(ByVal hInternetSession As Integer, ByVal sServerName As String, _
ByVal nServerPort As Integer, ByVal sUsername As String, _
ByVal sPassword As String, ByVal lService As Integer, _
ByVal lFlags As Integer, ByVal lContext As Integer) As Integer
End Function
  <DllImport("wininet")> _
Public Function FtpGetFile(ByVal hFtpSession As Integer, ByVal lpszRemoteFile As String, _
ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, _
ByVal dwFlagsAndAttributes As Integer, ByVal dwFlags As Integer, _
ByVal dwContext As Integer) As Boolean
End Function
  <DllImport("wininet")> _
Public Function InternetCloseHandle(ByVal hInet As Integer) As Integer
End Function
  调用:
  Public Sub GetFileByCallWininetDLL()
Try
Dim intinet As Integer = InternetOpen(Nothing, 0, Nothing, Nothing, 0)
If intinet > 0 Then
  '参数:intinet的session值,ftp地址,端口,用户名,密码,lService, lFlags,lContext
  Dim intinetconn As Integer = InternetConnect(intinet, "192.168.110.152", 0, "tokiwa", "tokiwa", 1, 0, 0)
  If intinetconn > 0 Then
  '下载某个文件到指定文件
  Dim ret As Boolean = FtpGetFile(intinetconn, "pagerror.gif", "C:\itest.gif", 0, 0, 1, 0)
  If ret Then
Console.WriteLine("ok!")
Console.ReadLine()
End If
InternetCloseHandle(intinetconn)
InternetCloseHandle(intinet)
Else
Console.WriteLine("can't connect!")
Console.ReadLine()
End If
  Else
Console.WriteLine("ftp wrong!")
Console.ReadLine()
End If
Catch ex As Exception
Console.WriteLine(ex.Message)
Console.ReadLine()
End Try
  End Sub
页: [1]
查看完整版本: VB.NET中使用FTP下载文件的两种方法