熟悉VB.NET都知道,它没有专门处理FTP的类,现在我们可以通过调用系统自带的FTP.EXE或者是调用win32API中的wininet.dll两种方法来完成基本操作。希望以下的代码能为大家抛砖引玉。
VB.NET处理FTP方法一:使用Ftp.exe,通过process类来调用它。
- ImportsSystem.Diagnostics
- ...
- PublicSubGetFileByCallFtp()
- '定义ProcessStartInfo,Process的启动信息。
- DimpsiAsNewProcessStartInfo
- 'ftp.exe的路径***放到配置文件里。
- psi.FileName="C:\WINNT\system32\ftp.exe"
- psi.RedirectStandardInput=False
- psi.RedirectStandardOutput=True
- '该值指示不使用操作系统Shell程序启动进程。
- psi.UseShellExecute=False
- '命令集文件名.注意,路径中不能有空格.
- DimfileNameAsString="C\ftp.txt"
- '-s:FileName表示,从文件中读取控制命令
- psi.Arguments="-s:"+fileName
- DimprocAsProcess
- proc=Process.Start(psi)
- '等待进程完成任务
- proc.WaitForExit()
- '在控制台输出结果
- Console.WriteLine(proc.StandardOutput)
- Console.ReadLine()
- EndSub
VB.NET处理FTP方法二,使用win32api——wininet.dll
首先是,api声明:
因为此测试程序,是VB.NETConsoleApplication所以,api声明写在Module里,
方法是静态的。所以没加Shared关键字,这一点请大家注意。
- <DllImport("wininet")>_
- PublicFunctionInternetOpen(ByValsAgentAsString,ByValLAccessTypeAsInteger,ByValsProxyNameAsString,_
- ByValSProxyBypassAsString,ByVallFlagsAsInteger)AsInteger
- EndFunction
- <DllImport("wininet")>_
- PublicFunctionInternetConnect(ByValhInternetSessionAsInteger,ByValsServerNameAsString,_
- ByValnServerPortAsInteger,ByValsUsernameAsString,_
- ByValsPasswordAsString,ByVallServiceAsInteger,_
- ByVallFlagsAsInteger,ByVallContextAsInteger)AsInteger
- EndFunction
- <DllImport("wininet")>_
- PublicFunctionFtpGetFile(ByValhFtpSessionAsInteger,ByVallpszRemoteFileAsString,_
- ByVallpszNewFileAsString,ByValfFailIfExistsAsBoolean,_
- ByValdwFlagsAndAttributesAsInteger,ByValdwFlagsAsInteger,_
- ByValdwContextAsInteger)AsBoolean
- EndFunction
- <DllImport("wininet")>_
- PublicFunctionInternetCloseHandle(ByValhInetAsInteger)AsInteger
- EndFunction
调用:
- PublicSubGetFileByCallWininetDLL()
- Try
- DimintinetAsInteger=InternetOpen(Nothing,0,Nothing,Nothing,0)
- Ifintinet>0Then
- '参数:intinet的session值,ftp地址,端口,用户名,密码,lService,lFlags,lContext
- DimintinetconnAsInteger=InternetConnect(intinet,"192.168.110.152",0,"tokiwa","tokiwa",1,0,0)
- Ifintinetconn>0Then
- '下载某个文件到指定文件
- DimretAsBoolean=FtpGetFile(intinetconn,"pagerror.gif","C:\itest.gif",0,0,1,0)
- IfretThen
- Console.WriteLine("ok!")
- Console.ReadLine()
- EndIf
- InternetCloseHandle(intinetconn)
- InternetCloseHandle
以上是VB.NET处理FTP的两种方法,大家学会了吗?
【编辑推荐】