ftp 做下载进度条

twtyypeuxk 2008-12-01 05:13:19
我要在我的代码加上一个进度条来显示当前下载文件的进度,我应该怎么加呢?

Public Sub DownFile(ByVal Str_Path As String, ByVal Local_Path As String, ByVal Str_UserName As String, ByVal Str_Password As String)

Dim URI As String = Str_Path
Dim ftp As System.Net.FtpWebRequest = _
CType(FtpWebRequest.Create(URI), FtpWebRequest)
ftp.Credentials = New _
System.Net.NetworkCredential(Str_UserName, Str_Password)

ftp.KeepAlive = False
ftp.UseBinary = True
ftp.Method = System.Net.WebRequestMethods.Ftp.DownloadFile
Using response As System.Net.FtpWebResponse = _
CType(ftp.GetResponse, System.Net.FtpWebResponse)
Using responseStream As IO.Stream = response.GetResponseStream
'loop to read & write to file
Using fs As New IO.FileStream(Local_Path, IO.FileMode.Create)

Dim buffer(2047) As Byte
Dim read As Integer = 0
Do
read = responseStream.Read(buffer, 0, buffer.Length)
fs.Write(buffer, 0, read)
Loop Until read = 0 'see Note(1)
responseStream.Close()
fs.Flush()
fs.Close()
End Using
responseStream.Close()
End Using
response.Close()
End Using

MsgBox("下载完成", MsgBoxStyle.OkOnly + 48, "提示")
End Sub
...全文
190 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
twtyypeuxk 2008-12-02
  • 打赏
  • 举报
回复
问题已解决!法如下!嘻

Public Sub DFile(ByVal Str_Path As String, ByVal Local_Path As String, ByVal Str_UserName As String, ByVal Str_Password As String)

Dim URI As String = Str_Path
Dim ftp As System.Net.FtpWebRequest = _
CType(FtpWebRequest.Create(URI), FtpWebRequest)
ftp.Credentials = New _
System.Net.NetworkCredential(Str_UserName, Str_Password)

ftp.KeepAlive = False
ftp.UseBinary = True
ftp.Method = System.Net.WebRequestMethods.Ftp.DownloadFile

Using response As System.Net.FtpWebResponse = _
CType(ftp.GetResponse, System.Net.FtpWebResponse)
'创建进度条,把他加入FORM中
'Dim pb As New ProgressBar
'设置最小值
ProgressBar1.Minimum = 0
Using responseStream As IO.Stream = response.GetResponseStream

''设置最大值
ProgressBar1.Maximum = GetFileSize("ftp://1.1.1.1/xx.zip", "用户名", "******")
'loop to read & write to file
Using fs As New IO.FileStream(Local_Path, IO.FileMode.Create)

Dim buffer(2047) As Byte
Dim read As Integer = 0
Do
read = responseStream.Read(buffer, 0, buffer.Length)
fs.Write(buffer, 0, read)

'每次读取的长度
If ProgressBar1.Maximum > (ProgressBar1.Value + 2047) Then
ProgressBar1.Value += buffer.Length
Else
ProgressBar1.Value = ProgressBar1.Maximum
End If

Loop Until read = 0 'see Note(1)
responseStream.Close()
fs.Flush()
fs.Close()
End Using
responseStream.Close()
End Using
response.Close()
End Using

MsgBox("下载完成", MsgBoxStyle.OkOnly + 48, "提示")
End Sub
Public Function GetFileSize(ByVal filename As String, ByVal Str_UserName As String, ByVal Str_Password As String) As Long
Dim URI As String = filename
Dim ftp As System.Net.FtpWebRequest = CType(FtpWebRequest.Create(URI), FtpWebRequest)
ftp.Credentials = New System.Net.NetworkCredential(Str_UserName, Str_Password)
ftp.Method = WebRequestMethods.Ftp.GetFileSize
Dim response As FtpWebResponse = ftp.GetResponse
GetFileSize = response.ContentLength
response.Close()
End Function
lizhengnan 2008-12-02
  • 打赏
  • 举报
回复
那就要想办法知道文件的长度了.
pb.Maximum =文件的长度
twtyypeuxk 2008-12-02
  • 打赏
  • 举报
回复
pb.Maximum = responseStream.Length
这一行会报错啊!
报错提示:些流不支持查找操作。
lizhengnan 2008-12-02
  • 打赏
  • 举报
回复

Public Sub DownFile(ByVal Str_Path As String, ByVal Local_Path As String, ByVal Str_UserName As String, ByVal Str_Password As String)

Dim URI As String = Str_Path
Dim ftp As System.Net.FtpWebRequest = _
CType(FtpWebRequest.Create(URI), FtpWebRequest)
ftp.Credentials = New _
System.Net.NetworkCredential(Str_UserName, Str_Password)

ftp.KeepAlive = False
ftp.UseBinary = True
ftp.Method = System.Net.WebRequestMethods.Ftp.DownloadFile
Using response As System.Net.FtpWebResponse = _
CType(ftp.GetResponse, System.Net.FtpWebResponse)
'创建进度条,把他加入FORM中
Dim pb As New ProgressBar
'设置最小值
pb.Minimum = 0
Using responseStream As IO.Stream = response.GetResponseStream

''设置最大值
pb.Maximum = responseStream.Length

'loop to read & write to file
Using fs As New IO.FileStream(Local_Path, IO.FileMode.Create)

Dim buffer(2047) As Byte
Dim read As Integer = 0
Do
read = responseStream.Read(buffer, 0, buffer.Length)
fs.Write(buffer, 0, read)

'每次读取的长度
pb.Value += buffer.Length
Loop Until read = 0 'see Note(1)
responseStream.Close()
fs.Flush()
fs.Close()
End Using
responseStream.Close()
End Using
response.Close()
End Using

MsgBox("下载完成", MsgBoxStyle.OkOnly + 48, "提示")
End Sub

win7cc 2008-12-02
  • 打赏
  • 举报
回复
进度条只是一个演示而已,他并不能代表完成下载的时间 上次看视频,里面那鸟人是这样讲的
wangsong145 2008-12-01
  • 打赏
  • 举报
回复
你试试先获得文件的个数,然后把文件个数赋值给给进度条的最大值,然后从1,每循环一次,给进度条值加1

16,717

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧