0
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
>>

メザニン機能であるため、request-download を修正する方法は次のとおりです。

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]
]
4

2 に答える 2

3

Rebolの読み取り関数は、すべての入力データを一度にメモリに読み取り、大規模なデータセットでは使用できません。大きなデータセットを処理するには、ポートを開いてそこからデータをチャンクでコピーする必要があります。

要求ダウンロード機能は、入力データと出力データの両方にポートを使用するように変更できると思います。Rebolメーリングリストのこのスレッドはあなたを助けるかもしれません:

http://www.rebol.org/ml-display-thread.r?m=rmlFQXC

より完全な例は、Carlのブログ(http://www.rebol.com/cgi-bin/blog.r?view=0281#comments )にあります。

この手法を使用しても、Rebol2で処理できるファイルのサイズには約2Gbの制限があります。

于 2009-09-17T02:39:30.330 に答える
1

これを試して

http://anton.wildit.net.au/rebol/util/batch-download.r

于 2009-09-17T10:08:21.703 に答える