日期:2013-08-21 浏览次数:20491 次
.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, _