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
- · .net官方编码方法和命名规则
- · .NET 开发AutoCAD2006指南(二)
- · .NET开发AutoCAD指南(一)
- · 用.net 2003开发Windows CE应用,解决与pocket pc通讯的问题
- · .NET 开发AutoCAD2006指南(二)
- · 《.NET软件技术学习与实践》之序言
- · .net remoting范例
- · .net缓存应用与分析
- · 一种改进的轻量级.NET应用程序性能测试框架
- · 用.NET创建Windows服务
- · .net中清除EXCEL进程最有效的方法
- · 初探.NET中的delegate类型与.NET事件
- · .NET中自己构建一个ArrDictionary
- · 使用.NET生成Excel文件
- · 根据函数名称定位函数
- · .Net项目制作安装程序
- · 使用.net下的系统事件增强应用程序
- · Dotnet总结(4)--xml读写
- · Dotnet总结(3)--打印
- · Dotnet总结(2)--访问ms sql server 数据库基类--2
- · 如何使用.NET配置文件(一)
- · 将.aspx文件和图片编译进dll
- · .net如何实现页面间的参数传递
- · Microsoft .NET 中的简化加密
- · .Net远程方法调用研究
- · .net 里面 protected private 的变量也可以访问
- · 构建基本的.NET Remoting应用程序
- · 让你的.NET程序兼容不同版本的Dll文件
- · 谈Microsoft .NET战略
- · .net中xmlhttp下载文件的方法参考
- · .net Compact Flamework中MD5CryptoServiceProvider的实现
- · 把.NET程序部署到没有安装.NET Framwork的机器上
- · 在.NET下编写中文代码程序
- · ADO 与ADO.NET
- · C#异步数据接收串口操作类
- · 用 .NET 开发的轻量级 UI 测试自动化
- · .net下开发COM+组件
- · 深入理解.NET 的JIT编译方式
