- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章vbs 多线程下载实现代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
话说还是闲来练手,初步实现了自己认为的“多线程”下载。(至于是不是多线程,可以参考12楼链接) 为避免冗余,省了一些错误检查。我觉得没多大实际用途,有兴趣的兄弟一起学习讨论呗。欢迎大家指正
复制代码 代码如下
'by wankoilz url=InputBox("输入完整下载地址:") threadCount=InputBox("输入线程数(不超过10吧,太多就累赘了):") fileName=GetFileName(url) filePath=GetFilePath(WScript.ScriptFullName) Set ohttp=CreateObject("msxml2.xmlhttp") Set ado=CreateObject("adodb.stream") Set fso=CreateObject("scripting.filesystemobject") ado.Type=1 ado.Mode=3 ado.Open ohttp.open "Head",url,True ohttp.send Do While ohttp.readyState<>4 WScript.Sleep 200 Loop '获得文件大小 fileSize=ohttp.getResponseHeader("Content-Length") ohttp.abort '创建一个和下载文件同样大小的临时文件,供下面ado分段重写 fso.CreateTextFile(filePath&"TmpFile",True,False).Write(Space(fileSize)) ado.LoadFromFile(filePath&"TmpFile") blockSize=Fix(fileSize/threadCount):remainderSize=fileSize-threadCount*blockSize upbound=threadCount-1 '定义包含msxml2.xmlhttp对象的数组,·成员数量便是线程数 '直接 Dim 数组名(变量名) 是不行的,这里用Execute变通了一下 Execute("Dim arrHttp("&upbound&")") For i=0 To UBound(arrHttp) startpos=i*blockSize endpos=(i+1)*blockSize-1 If i=UBound(arrHttp) Then endpos=endpos+remainderSize Set arrHttp(i)=CreateObject("msxml2.xmlhttp") arrHttp(i).open "Get",url,True '分段下载 arrHttp(i).setRequestHeader "Range","bytes="&startpos&"-"&endpos arrHttp(i).send Next Do WScript.Sleep 200 For i=0 To UBound(arrHttp) If arrHttp(i).readystate=4 Then '每当一个线程下载完毕就将其写入临时文件的相应位置 ado.Position=i*blockSize MsgBox "线程"&i&"下载完毕!" ado.Write arrHttp(i).responseBody arrHttp(i).abort complete=complete+1 End If Next If complete=UBound(arrHttp)+1 Then Exit Do timeout=timeout+1 If timeout=5*30 Then '根据文件大小设定 MsgBox "30秒超时!" WScript.Quit End If Loop If fso.FileExists(filePath&fileName) Then fso.DeleteFile(filePath&fileName) fso.DeleteFile(filePath&"TmpFile") ado.SaveToFile(filePath&fileName) MsgBox "文件下载完毕!" Function GetFileName(url) arrTmp=Split(url,"/") GetFileName=arrTmp(UBound(arrTmp)) End Function Function GetFilePath(fullname) arrTmp=Split(fullname,"\") For i=0 To UBound(arrTmp)-1 GetFilePath=GetFilePath&arrTmp(i)&"\" Next End Function 。
测试下载地址:
复制代码 代码如下
http://www.zzvips.com/images/logo.gif 。
VBS实现 多线程 补充 今天有人发邮件问我一个问题: 想请教一下VBS中INPUTBOX函数能否超时关闭? 如果可以的话,应该如何超时关闭输入框? 万分感谢 乍一看这是不可能实现的,因为InputBox函数本身没有超时关闭的参数,而且程序会一直等待InputBox返回才继续运行,后面的语句不可能在InputBox返回之前执行。 如果VBS能实现高级语言的多线程的话……只可惜VBS不可能实现多线程,但是可以用setTimeout方法模拟“多线程”.
复制代码 代码如下
Dim IE Set IE = CreateObject("InternetExplorer.Application") IE.Navigate "about:blank" Set window = IE.Document.parentWindow id = window.setTimeout(GetRef("on_timeout"),3000,"VBScript") name = InputBox("Please enter your name","InputBox Timeout") window.clearTimeout id If name <> "" Then MsgBox "Hello," & name IE.Quit 'By Demon 'http://demon.tw Sub on_timeout() Dim WshShell set WshShell = CreateObject("wscript.Shell") WshShell.SendKeys "{ESC}" End Sub 。
用setTimeout方法设定3秒超时,3秒后用SendKeys方法发送ESC键结束InputBox。当然,用SendKeys是很不靠谱的,我一般很少用SendKeys方法,因为它做了太多的假设,万一InputBox不是激活窗口呢?这里只是为了程序简单而用了SendKeys,可以换成结束脚本本身。 同理,想在VBS中实现VB中的Timer事件的话可以用setInterval方法,我就不写例子了,自己看文档。 参考链接:setTimeout Method (window, Window Constructor) 。
最后此篇关于vbs 多线程下载实现代码的文章就讲到这里了,如果你想了解更多关于vbs 多线程下载实现代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
当我尝试通过我的 .exe 文件从 url 下载 .pdf 文件时出现以下错误。 The server committed a protocol violation. Section=Response
我是一家非营利组织的 G Suite 管理员,刚刚发现数据导出功能,这似乎是个人帐户的外卖。 导出文件已准备好,现在可以从 Google Cloud Platform Storage 中的存储桶下载。
导航 引言 总体思路 七牛云相关的配置文件 获取七牛云上传token 相关类定义 核心代码实现 获取七牛云图片下载链接 公开空
这不是后端编程问题。我只能修改标记或脚本(或文档本身)。我在这里问的原因是因为我对适当术语的所有搜索都不可避免地导致有关编程此功能的问题和解决方案。我不是试图通过编程来强制它;我必须找出此 PDF 行
您好,我已在 Google AdSense 中注册,我想使用适用于 iOS 的 SDK,但目前我找不到 SDK 下载链接。 我的申请已获批准。 任何人都知道如何下载这个sdk。 我使用这个链接来描述如
我需要为当前在 SourceForge 上的 github 项目提供二进制文件和文档。在那里,我可以为我需要的下载提供一个目录结构,因为我必须为大约 10 个不同的操作系统提供几个版本。 github
我从 Canvas 下载绘图时遇到问题。这是我的代码: function downloadCanvas(link, canvasId, filename) { link.href =
ASP.NET 项目 我将使用 Azure 进行存储。问题(要求): 在我的项目中,我让注册用户下载文件。但我不希望用户将此下载链接分享给未注册的人(例如:我给注册用户的下载链接只能在他们的计算机上下
我编写了一个servlet,用于检查http header ,但我不知道为什么当页面加载时,它会自动开始下载。 /* * To change this template, choose To
我正在尝试将下载添加到我的网络浏览器,但遇到的问题是获取您尝试下载的文件的名称。这是我的下载代码: engine.locationProperty().addListener(new ChangeLi
我正在尝试下载网站的 html: String encoding = "UTF-8"; HttpContext localContext = new BasicHttpContext();
我制作了一个带有“开始下载”按钮的框架,用于从网站下载 JAR。 问题是每当我点击开始下载按钮时,整个框架就会卡住,直到下载完成,然后就正常了。 我该如何解决这个问题? 这是单击按钮时执行的代码 p
我得到这段代码来实现一些东西,它可以帮助我从给定的 URL 下载文件。 -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSes
我正在尝试创建一个 Controller 来使用流方法下载和上传文件,在我的例子中,所有文件都作为 Blob 保存在数据库中。我阅读了 Jboss Netty 的文档,但我认为这不是我的最佳解决方案。
下载并保存文件 let destination: DownloadRequest.DownloadFileDestination = { _, _ in // var fileURL = sel
使用 htaccess 我基本上试图禁止访问该页面,即 http://example.com , 但它仍然允许人们下载文件,如果他们有直接链接即 http://example.com/hi.zip .
我正在寻求将脚本与我的控制面板集成,并且由于我是新手脚本编写者而遇到问题。我想做的是用 1 个脚本下载一个文件并解压它。 示例: wget http://example.com/example.tar
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
这个问题在这里已经有了答案: Top techniques to avoid 'data scraping' from a website database (14 个答案) 关闭 5 年前。 我有
这个问题在这里已经有了答案: Reading and parsing email from Gmail using C#, C++ or Python (6 个答案) 关闭 7 年前。 我只是想,是
我是一名优秀的程序员,十分优秀!