download-dir: request-dir
Print ["downloading " "VStudio2008Express.iso" "..." ]
url: http://go.microsoft.com/fwlink/?LinkId=104679
file-save: to-rebol-file rejoin [download-dir "VStudio2008Express.iso"]
request-download/to url file-save
最后,进度条显示下载已完成:
** Script Error: Not enough memory
** Where: append
** Near: insert tail series :value
>>
所以如何纠正请求下载,因为它是一个夹层功能:
func [
{Request a file download from the net. Show progress. Return none on error.}
url [url!]
/to "Specify local file target." local-file [file! none!]
/local prog lo stop data stat event-port event
][
view/new center-face lo: layout [
backeffect [gradient 1x1 water gray]
space 10x8
vh2 300 gold "Downloading File:"
vtext bold center 300 to-string url
prog: progress 300
across
btn 90 "Cancel" [stop: true]
stat: text 160x24 middle
]
stop: false
data: read-thru/to/progress/update url local-file func [total bytes] [
prog/data: bytes / (max 1 total)
stat/text: reform [bytes "bytes"]
show [prog stat]
not stop
]
unview/only lo
if not stop [data]
]
答案 0 :(得分:3)
Rebol的读取函数一次将所有输入数据读入内存,不能在大型数据集上使用。您必须打开一个端口并以块的形式复制数据以处理大型数据集。
我认为可以修改请求下载功能,以便为输入和输出数据使用端口。来自Rebol邮件列表的这个帖子可以帮助你:
http://www.rebol.org/ml-display-thread.r?m=rmlFQXC
您可以在http://www.rebol.com/cgi-bin/blog.r?view=0281#comments
的Carl博客上找到更全面的例子即使使用这种技术,也可以在Rebol 2中处理的文件大小约为2Gb。
答案 1 :(得分:1)