批量下载的问题?[已解决]
本帖最后由 newuser 于 2010-4-23 09:50 编辑关闭吧!
因我自己有个网站,所以我的批量下载容易些,以下是代码,是结合帮助写的,虽然成功了,但测试中也发现了一个怪问题,不得其解?请大家多帮助.
问题:多次成功测试该代码后,出现"将指定文件内容读取到数组时发生错误:" ,我想是Not _FileReadToArray(@ScriptDir & "\LocalPatchsList.txt",$PatchsFile) 出了问题,可是为什么呢?当我重新启动计算机后,再测试该代码,又正常了,多次测试后,问题又回来了?;第2步 客户端操作
;从服务器端下载存储补丁文件名称的文本文件
InetGet("http://10.64.240.23:801/patchs/PatchsList.txt","LocalPatchsList.txt",1,1)
;第1个1是不从IE缓存下载而是强制从远程服务器下载
;第2个1是InetGet()函数立即返回并实现后台下载,因为如果改为0下载的文件又过大,那么等待的时间会很长让人受不了
;批量执行补丁文件
;根据文本中的补丁文件名称实现 补丁文件批量下载 下载
#include <file.au3>
Local$PatchsFile ;定义了一个用于接收每个补丁文件名称的数组
If Not _FileReadToArray(@ScriptDir & "\LocalPatchsList.txt",$PatchsFile) Then ;把从服务器下载的存储补丁文件名称文件内容写到数组
MsgBox(4096,"发现错误","将指定文件内容读取到数组时发生错误:" & @error)
EndIf
MsgBox(0,"请稍等,文件正在下载中...","听段音乐休息一下吧,呵呵!")
For $i=1 To $PatchsFile
MsgBox(0,"第" & $i & "行的补丁文件名称是:",$PatchsFile[$i])
Local $TempDown=InetGet("http://10.64.240.23:801/patchs/" & $PatchsFile[$i],$PatchsFile[$i],1,1)
;定义变量$TempDown接受InetGet()函数返回的句柄
Do
Sleep(250)
Until InetGetInfo($TempDown,2) ; 检查下载是否完成.
InetClose($TempDown)
FileDelete(@ScriptDir & "\LocalPatchsList.txt")
Next 回复 1# newuser
等待中,呵呵! 回复 2# newuser
着急,不想灌水!
以下代码遇到同样问题???;第2步 客户端操作---B:根据下载的文件实现批量下载
#include <File.au3>
Local$PatchsFile ;定义了一个用于接收每个补丁文件名称的数组
If Not _FileReadToArray(@ScriptDir & "\LocalPatchsList.txt",$PatchsFile) Then ;把从服务器下载的存储补丁文件名称文件内容写到数组
MsgBox(4096,"发现错误","将指定文件内容读取到数组时发生错误:" & @error)
EndIf
DirCreate(@ScriptDir & "\Update") ;建立一个目录用于存储下载的补丁文件
;for语句开始批量下载
For $i=1 To $PatchsFile
MsgBox(0,"第" & $i & "行的补丁文件名称是:",$PatchsFile[$i])
Local $TempDown=InetGet("http://10.64.240.23:801/patchs/" & $PatchsFile[$i],@ScriptDir & "\Update\" & $PatchsFile[$i],1,1)
;定义变量$TempDown接受InetGet()函数返回的句柄
Do
Sleep(250)
MsgBox(0,"请稍等,文件正在下载中...","听段音乐休息一下吧,呵呵!")
Until InetGetInfo($TempDown,2) ; 检查下载是否完成.没有Do...Until循环,就无法实现批量下载,即仅下载1个文件
InetClose($TempDown) ;关闭句柄,释放资源
FileDelete(@ScriptDir & "\LocalPatchsList.txt")
Next
;第2步 客户端操作---C:批量打补丁
$FileList = _FileListToArray(@ScriptDir & "\Update", "*.exe", 1)
For $i = 3 To 1 Step -1 ;显示打补丁的相关信息
ToolTip(@CR & "共" & $FileList & "个系统补丁," & $i & "秒后开始安装... " & @CR, @DesktopWidth - 260, @DesktopHeight - 100)
Sleep(1000)
Next
For $i = 1 To $FileList ;开始批量打补丁
ToolTip(@CR & "正在安装 " & $FileList[$i] & " (" & $i & "/" & $FileList & ") " & @CR, @DesktopWidth - 300, @DesktopHeight - 100)
RunWait(@ScriptDir & "\Update\" & $FileList[$i] & " /quiet /passive /norestart")
Next
ToolTip(@CR & "系 统 补 丁 安 装 完 毕 !" & @CR, @DesktopWidth - 260, @DesktopHeight - 100)
Sleep(2000)
DirRemove(@ScriptDir & "\Update") 回复 3# newuser
着急,等待老师们的帮助,谢谢! 回复 1# newuser
郁闷,苦闷,以上代码为什么重新启动计算机后又好使?
为什么不稳定呢? 估计问题出在这一句:
InetGet("http://10.64.240.23:801/patchs/PatchsList.txt","LocalPatchsList.txt",1,1)
最后一个1 表示不等下载完,就执行程序下面一句。下载PatchsList.txt虽然不需很长时间,但总是要花一点时间去下载的,特别是有时候网络不是很好的话,PatchsList.txt还没下载好,程序 就要执行_FileReadToArray(@ScriptDir & "\LocalPatchsList.txt",$PatchsFile) 这一句,当然 会发生错误的。
最后一个1 改成0,就应该没有什么问题了(。 你都说了没有等下载完,那么_FileReadToArray就很有可能出错。 回复 6# shqf
最后一个1不是进行后台下载的意思吗? 回复 7# zjimmy
但是发生这样的错误时,我检查LocalPatchsList.txt已经下载到本地机器里,而且内容完整.关键是重新启动计算机后,再经过多次尝试,这个问题是不出现的. 如果不用后台下载,是否还是会出现错误? 回复 10# zjimmy
非常奇怪,我绝对没有动过任何东西,到现在也还没有发生昨天的错误,依然采取"后台下载".真是奇怪? 回复zjimmy
非常奇怪,我绝对没有动过任何东西,到现在也还没有发生昨天的错误,依然采取"后台下载".真是 ...
newuser 发表于 2010-4-23 09:14 http://www.autoitx.com/images/common/back.gif
后台下载并不保险,只要有一次出错,那这个代码就需要完善。
时间换取稳定,我想还是必要的。 回复 12# zjimmy
谢谢,我觉得也是,另外,请教批量打补丁如何效率更高呢?我尝试上面的代码批量打了6个补丁,大小都是3、4 M的,可是感觉硬盘嘎吱嘎吱的,虽然也不过用了4 、5分钟,感觉不好!
用 360 打那么多补丁,怎么那么快呢?难道是心理作用吗?当然,人家的东西毕竟是比咱的强大的多! 回复zjimmy
谢谢,我觉得也是,另外,请教批量打补丁如何效率更高呢?我尝试上面的代码批量打了6个补丁,大 ...
newuser 发表于 2010-4-23 09:56 http://www.autoitx.com/images/common/back.gif
那段代码应该没有问题。
我想360不可能比微软本身还要快吧?那些补丁的静默安装参数是微软官方提供的。 回复 14# zjimmy
谢谢,看看用户用完什么感觉.
页:
[1]