找回密码
 加入
搜索
查看: 13217|回复: 25

[AU3基础] 【求助】AU3实现FTP下载文件显示进度条的问题【已解决】

[复制链接]
发表于 2011-9-8 20:59:35 | 显示全部楼层 |阅读模式
本帖最后由 huaisha1224 于 2011-9-9 15:14 编辑

希望实现用inetget下载FTP文件的过程中显示这个文件的下载进度
我的方式是
先定义一个函数并用InetGetSize获取文件大小并赋值给这个函数、然后使用ProgressOn来显示 下载进度
可是我现在用For $ProgressBar = 0 To $nSize Step 10 的时候 这个百分比可以达到%之几万(文件比较大)
如果我用For $ProgressBar = 0 To 100 Step 10 的话 当进度条跑完了文件还没有下载完

在论坛找了半天实在是搞不定了 、请高手帮忙指点一二
代码如下:
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,"完成提示框","下载完成")

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2011-9-8 21:06:21 | 显示全部楼层
各位大虾、快快献身
发表于 2011-9-8 21:24:15 | 显示全部楼层
这个还真不会,仍然用For $ProgressBar = 0 To 100 Step 10 ,文件下载结束后让进度条直接跳到100%,然后在关闭进度条,这是我的笨办法,呵呵!
发表于 2011-9-8 21:24:53 | 显示全部楼层
这个数学要有点基础,需要除法,呵呵!
给你一个例子在for循环中
GUICtrlSetData($Progress1, (($i + 1) / (UBound($afile) )) * 100)
next
 楼主| 发表于 2011-9-8 22:12:47 | 显示全部楼层
回复 4# gzh888666


我还以为比较简单捏
比较复杂的话我这个业余选手还真的有点吃不消
发表于 2011-9-9 07:28:37 | 显示全部楼层
回复 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,"完成提示框","下载完成")



 楼主| 发表于 2011-9-9 12:18:58 | 显示全部楼层
回复 6# republican

我用您提供的这个方法也还是不行哇、不知道那里出错了
 楼主| 发表于 2011-9-9 12:24:31 | 显示全部楼层
本帖最后由 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)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-9-9 12:55:01 | 显示全部楼层
回复 8# huaisha1224


    能找到例子不就更简单了吗?
   第14行代码,把Int($info/$size*100)赋给Progress就好了,利用循环,隔断时间就赋值一次……
发表于 2011-9-9 13:38:38 | 显示全部楼层
不知道是不是这样子。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2011-9-9 15:13:41 | 显示全部楼层
多谢各位、已经解决了
我就用
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来显示了、也很不错的
发表于 2011-9-13 15:01:59 | 显示全部楼层
留名 备用 很受启发
发表于 2011-9-13 17:03:25 | 显示全部楼层
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()
发表于 2011-9-15 13:43:19 | 显示全部楼层
谢谢分享。。
发表于 2011-9-15 23:21:23 | 显示全部楼层
学习了,很有用啊!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-3-29 15:55 , Processed in 0.085615 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表