VB.Net实现Ftp下载的方法
来源:互联网 发布:淘宝店装修 编辑:程序博客网 时间:2024/04/30 07:21
调用方式:
DownloadFile("abc.rar","d:/abc.rar","Flase") ' 3个参数分别为远程ftp的文件名、保存到本地的完整路径、是否续传
功能函数:
Public Sub DownloadFile(ByVal Str_RemoteFileName As String, _
ByVal Str_LocalFileName As String, _
ByVal Bool_Resume As Boolean)
Dim Data_St As Stream
Dim output As FileStream
Dim LobSocket As Socket
Dim offset, npos As Long
If (Not Logined()) Then
Logined()
End If
SetBinaryMode(True)
If (Str_LocalFileName.Equals("")) Then
Str_LocalFileName = Str_RemoteFileName
End If
If (Not (File.Exists(Str_LocalFileName))) Then
Data_St = File.Create(Str_LocalFileName)
Data_St.Close()
End If
output = New FileStream(Str_LocalFileName, FileMode.Open)
LobSocket = CreateDataSocket()
offset = 0
If (Bool_Resume) Then
offset = output.Length
If (offset > 0) Then
SendCommand("REST " & offset)
Str_Reply = ServerReply(True)
Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
If (Int_Reply <> 350) Then
offset = 0
End If
End If
If (offset > 0) Then
npos = output.Seek(offset, SeekOrigin.Begin)
End If
End If
SendCommand("RETR " & Str_RemoteFileName)
Str_Reply = ServerReply(True)
Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
If (Not (Int_Reply = 150 Or Int_Reply = 125)) Then
MsgBox(Str_Reply.Substring(4))
End If
Do While (True)
Array.Clear(Byte_Buffer, 0, Byte_Buffer.Length)
Int_Bytes = LobSocket.Receive(Byte_Buffer, Byte_Buffer.Length, 0)
output.Write(Byte_Buffer, 0, Int_Bytes)
If (Int_Bytes <= 0) Then
Exit Do
End If
Loop
output.Close()
If (LobSocket.Connected) Then
LobSocket.Close()
End If
Str_Reply = ServerReply(True)
Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
If (Not (Int_Reply = 226 Or Int_Reply = 250)) Then
MsgBox(Str_Reply.Substring(4))
End If
End Sub
Private Function CreateDataSocket() As Socket
Dim index1, index2, len As Int32
Dim partCount, i, port As Int32
Dim ipData, buf, ipAddress As String
Dim parts(6) As Int32
Dim ch As Char
Dim s As Socket
Dim ep As IPEndPoint
SendCommand("PASV")
Str_Reply = ServerReply(True)
Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
If (Int_Reply <> 227) Then
MsgBox(Str_Reply.Substring(4))
End If
index1 = Str_Reply.IndexOf("(")
index2 = Str_Reply.IndexOf(")")
ipData = Str_Reply.Substring(index1 + 1, index2 - index1 - 1)
len = ipData.Length
partCount = 0
buf = ""
For i = 0 To ((len - 1) And partCount <= 6)
ch = Char.Parse(ipData.Substring(i, 1))
If (Char.IsDigit(ch)) Then
buf += ch
ElseIf (ch <> ",") Then
MsgBox(Str_Reply)
End If
If ((ch = ",") Or (i + 1 = len)) Then
Try
parts(partCount) = Int32.Parse(buf)
partCount += 1
buf = ""
Catch ex As Exception
MsgBox(Str_Reply)
End Try
End If
Next
ipAddress = parts(0) & "." & parts(1) & "." & parts(2) & "." & parts(3)
port = parts(4) * (2 ^ 8)
port = port + parts(5)
s = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
ep = New IPEndPoint(Dns.GetHostEntry(ipAddress).AddressList(0), port)
Try
s.Connect(ep)
Catch ex As Exception
MsgBox("无法连接到远程ftp服务器")
End Try
Return s
End Function
Public Sub SetBinaryMode(ByVal bMode As Boolean)
If (bMode) Then
SendCommand("TYPE I")
Else
SendCommand("TYPE A")
End If
Str_Reply = ServerReply(True)
Int_Reply = Int32.Parse(Str_Reply.Substring(0, 3))
If (Int_Reply <> 200) Then
MsgBox("111" & Str_Reply.Substring(4))
End If
End Sub
- VB.Net实现Ftp下载的方法
- VB.Net实现Ftp下载的方法
- VB.Net实现Ftp上传的方法
- VB.Net实现登陆Ftp的方法[乐博网原创]
- [VB.NET]自定义FTP类的实现
- VB.NET中使用FTP下载文件的两种方法。
- VB.NET中使用FTP下载文件的两种方法
- VB.NET中使用FTP下载文件的两种方法
- VB.NET中使用FTP下载文件的两种方法
- VB.Net实现图片压缩的方法
- (VB)FTP异步下载
- VB.NET对FTP的操作
- [Android中级]使用Commons-net-ftp来实现FTP上传、下载的功能
- 用.net实现ftp上传、下载
- vb.net 调用wininet.dll的FTP上传文件方法失败
- Java ftp实现文件的上传和下载ftp,sftp sun.net.ftp.FtpProtocolException:Welcome message: SSH-2.0-OpenSSH_5.1
- 用vb实现ftp的上传下载
- 用vb实现ftp的上传下载
- 谁有论坛在线人数统计的code啊?
- UML说明类关系
- 使用 8 位 YUV 格式的视频呈现
- Java开发者的十大戒律
- Web.config详解
- VB.Net实现Ftp下载的方法
- Repeater 创建复杂表头的表格
- LAMP万岁
- WDM 驱动错误处理
- 什么是BI
- 按位运算的项目实践,接上文的反射项目实践
- 房地产要不要成本信息化
- 利用.NET FileStreams将DTD插入XML文件中
- 设计模式(总写)