huaisha1224 发表于 2011-9-8 20:59:35

【求助】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,"完成提示框","下载完成")

huaisha1224 发表于 2011-9-8 21:06:21

各位大虾、快快献身

xms77 发表于 2011-9-8 21:24:15

这个还真不会,仍然用For $ProgressBar = 0 To 100 Step 10 ,文件下载结束后让进度条直接跳到100%,然后在关闭进度条,这是我的笨办法,呵呵!

gzh888666 发表于 2011-9-8 21:24:53

这个数学要有点基础,需要除法,呵呵!
给你一个例子在for循环中
GUICtrlSetData($Progress1, (($i + 1) / (UBound($afile) )) * 100)
next

huaisha1224 发表于 2011-9-8 22:12:47

回复 4# gzh888666


我还以为比较简单捏
比较复杂的话我这个业余选手还真的有点吃不消{:face (396):}

republican 发表于 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,"完成提示框","下载完成")



huaisha1224 发表于 2011-9-9 12:18:58

回复 6# republican

我用您提供的这个方法也还是不行哇、不知道那里出错了

huaisha1224 发表于 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)

KgtFaith 发表于 2011-9-9 12:55:01

回复 8# huaisha1224


    能找到例子不就更简单了吗?
   第14行代码,把Int($info/$size*100)赋给Progress就好了,利用循环,隔断时间就赋值一次……

黑色袜子 发表于 2011-9-9 13:38:38

不知道是不是这样子。

huaisha1224 发表于 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来显示了、也很不错的

iori2882 发表于 2011-9-13 15:01:59

留名 备用 很受启发

h20040606 发表于 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()

xyhqqaa 发表于 2011-9-15 13:43:19

谢谢分享。。

learn321 发表于 2011-9-15 23:21:23

学习了,很有用啊!
页: [1] 2
查看完整版本: 【求助】AU3实现FTP下载文件显示进度条的问题【已解决】