【求助】AU3实现FTP下载文件显示进度条的问题【已解决】
本帖最后由 huaisha1224 于 2011-9-9 15:14 编辑希望实现用inetget下载FTP文件的过程中显示这个文件的下载进度
我的方式是
先定义一个函数并用InetGetSize获取文件大小并赋值给这个函数、然后使用ProgressOn来显示 下载进度
可是我现在用For $ProgressBar = 0 To $nSize Step 10 的时候 这个百分比可以达到%之几万(文件比较大)
如果我用For $ProgressBar = 0 To 100 Step 10 的话 当进度条跑完了文件还没有下载完
在论坛找了半天实在是搞不定了{:face (396):} 、请高手帮忙指点一二{:face (382):}
代码如下:Local $nDownload
Local $nSize
Local $ProgressBar
DirCreate ("H:\TEST");创建一个文件夹、用于存放下载的文件
;用InetGetSize获取文件大小
$nSize = InetGetSize("ftp://sam:sam@192.168.9.253/2.rar")
MsgBox(0,"提示框","文件大小:" & $nSize)
;显示下载进度
ProgressOn ("下载进度","正在下载请稍候.....","0 %")
For $ProgressBar = 0 To $nSize Step 10
Sleep(1000)
ProgressSet($ProgressBar,$ProgressBar & " %")
Next
ProgressSet(100 ,"完成","全部完成")
Sleep(500)
;使用InetGet下载文件
$nDownload = InetGet("ftp://sam:sam@192.168.9.253/2.rar","H:\TEST\2.rar",0,1)
Do
Sleep(200)
Until InetGetInfo($nDownload,2) ;检测是否下载完成
ProgressOff() ;关闭进度条
MsgBox(0,"完成提示框","下载完成")
各位大虾、快快献身 这个还真不会,仍然用For $ProgressBar = 0 To 100 Step 10 ,文件下载结束后让进度条直接跳到100%,然后在关闭进度条,这是我的笨办法,呵呵! 这个数学要有点基础,需要除法,呵呵!
给你一个例子在for循环中
GUICtrlSetData($Progress1, (($i + 1) / (UBound($afile) )) * 100)
next 回复 4# gzh888666
我还以为比较简单捏
比较复杂的话我这个业余选手还真的有点吃不消{:face (396):} 回复 1# huaisha1224
看到你的代码,让我情何以堪呢..你的进度与下载有什么关系呢?
#Include <FTPEx.au3>
Local $FileBuff,$ri = 0,$Percentage = 0
$server = '192.168.9.253'
$username = 'sam'
$pass = 'sam'
$NetPath = '/2.rar'
$Open = _FTP_Open('MyFTP Control')
$Conn = _FTP_Connect($Open, $server, $username, $pass)
$nSize=_FTP_FileGetSize($Conn,$NetPath)
$rFile = _FTP_FileOpen($Conn,$NetPath)
$lFIle = FileOpen(@ScriptDir & "\2.rar",2+8+16 )
ProgressOn ("下载进度","正在下载请稍候.....","0 %")
While 1
$FileBuff = _FTP_FileRead($rFile,1024 * 64) ;64K
If @error Then ExitLoop
$ri += BinaryLen($FileBuff)
FileWrite($lFile,$FileBuff)
$Percentage = Round($ri / $nSize * 100,2)
ProgressSet($Percentage ,$Percentage & " %")
Sleep(10)
WEnd
FileClose($lFile)
$Ftpc = _FTP_Close($Open)
ProgressOff() ;关闭进度条
MsgBox(0,"完成提示框","下载完成")
回复 6# republican
我用您提供的这个方法也还是不行哇、不知道那里出错了 本帖最后由 huaisha1224 于 2011-9-9 12:30 编辑
我在论坛里面搜索了一篇帖子
效果是这样的:
代码如下:Local $Time = TimerInit(), $type
Local $size = InetGetSize("ftp://sam:sam@192.168.9.253/2.rar")
Local $hDownload = InetGet("ftp://sam:sam@192.168.9.253/2.rar", @DesktopDir & "\2.rar", 1, 1)
Do
Sleep(100)
$info = InetGetInfo($hDownload,0)
$s = Int($info/(TimerDiff($Time)/1000)/1024)
TrayTip('下载中'&$type, _
'下载速度:'&$s&'KB'&@CR& _
'下载时间:'&Int($size/1024/$s/60)&'分'&@CR& _
'剩余时间:'&Int(($size-$info)/1024/$s/60)&'分'&@CR& _
'下载大小:'&Int($info/1024)&'KB'&@CR& _
'剩余大小:'&Int(($size-$info)/1024)&'KB'&@CR& _
'下载进度:'&Int($info/$size*100)&'%', 10)
$type &= '.'
If StringLen($type) > 8 Then $type = ''
Until InetGetInfo($hDownload, 2) 回复 8# huaisha1224
能找到例子不就更简单了吗?
第14行代码,把Int($info/$size*100)赋给Progress就好了,利用循环,隔断时间就赋值一次…… 不知道是不是这样子。 多谢各位、已经解决了
我就用Local $Time = TimerInit(), $type
Local $size = InetGetSize("ftp://sam:sam@192.168.9.253/2.rar")
Local $hDownload = InetGet("ftp://sam:sam@192.168.9.253/2.rar", @DesktopDir & "\2.rar", 1, 1)
Do
Sleep(100)
$info = InetGetInfo($hDownload,0)
$s = Int($info/(TimerDiff($Time)/1000)/1024)
TrayTip('下载中'&$type, _
'下载速度:'&$s&'KB'&@CR& _
'下载时间:'&Int($size/1024/$s/60)&'分'&@CR& _
'剩余时间:'&Int(($size-$info)/1024/$s/60)&'分'&@CR& _
'下载大小:'&Int($info/1024)&'KB'&@CR& _
'剩余大小:'&Int(($size-$info)/1024)&'KB'&@CR& _
'下载进度:'&Int($info/$size*100)&'%', 10)
$type &= '.'
If StringLen($type) > 8 Then $type = ''
Until InetGetInfo($hDownload, 2)现在下载进度用tips来显示了、也很不错的 留名 备用 很受启发 Local $Time = TimerInit(), $type
Local $size = InetGetSize("ftp://sam:sam@192.168.9.253/2.rar")
Local $hDownload = InetGetftp://sam:sam@192.168.9.253/2.rar", @DesktopDir & "\2.rar", 1, 1)
ProgressOn ("下载进度","正在下载请稍候.....","0 %")
Do
Sleep(100)
$info = InetGetInfo($hDownload,0)
$jindu=Int($info/$size*100)
ProgressSet($jindu,String($jindu) & " % 已经下载 "& String($info) & "字节" )
Until InetGetInfo($hDownload, 2)
ProgressSet(100 ,"完成","全部完成")
Sleep(100)
ProgressOff() 谢谢分享。。 学习了,很有用啊!
页:
[1]
2