2013-10-15 45 views
3

在雷博爾,有話對目錄和文件的管理,像化妝目錄,什麼-目錄,重命名,創建鏈接等 但我不能找到一個詞簡單地將文件複製到另一個位置或到新創建的文件。如何在Rebol中複製文件而不將它們加載到內存中?

一種解決方案是讀寫。例如,我可以這樣做:

>> source: %.bash_history 
== %.bash_history 
>> target: %nothing 
== %nothing 
>> write/binary target (read/binary source) 

它運作良好。但是如果我的文件大於可用內存呢?有沒有辦法複製文件而不加載到內存中?

此刻,我做一個調用底層的操作系統:

>> call rejoin ["cp " to-string source " " to-string target] 

但這不能移植到比我一些不同的平臺(GNU/Linux Mint的):它會在所有Unix系統上運行, Mac OSX,但不是其他的。

我想這應該不會太難寫一個小功能要做到這一點,猜測正在運行的操作系統,並相應地調整命令行。

所以我的問題:是否有已經是REBOL標準的文字複製文件?如果沒有,是否有計劃在模塊或其他內容中製作一個?

回答

4

我不記得一個內置的方式,從什麼的問題做到這一點不談,但你可以做到這一點通過使用文件端口無需緩衝:

source: open/direct/binary/read %source 
target: open/direct/binary/write %target 
bytes_per: 1024 * 100 
while [not none? data: copy/part source bytes_per][ 
    insert target data 
] 
close target 
close source 

(注:這個答案是雷博爾2)

+0

它工作得很好,謝謝! – Pierre

+0

好的答案,建議的代碼工作得很好。但是請注意,這使用了非標準的編碼風格('bytes_per')違反[標準雷博爾編碼約定(http://www.rebol.com/docs/core23/rebolcore-5.html#section-5.2 .3)用於單詞命名。在公共Rebol代碼中,我強烈建議遵守公佈的編碼約定,並使用**'bytes-per' **來代替。 – earl

+0

@earl表示編碼風格不強制;他們只是導遊。我根據變量的使用方式選擇破折號和下劃線。像你一樣的編輯[已經在Meta上提出](http://meta.stackexchange.com/questions/200172/style-changes-in-edits),並且對此不以爲然。 – Izkata

1

您還可以使用系統/版本來檢測你的腳本運行何種操作系統上:

call rejoin either 3 = system/version/4 [ 
    ;windows 
    [{copy "} to-local-file source {" "} to-local-file target {"}] 
] [ 
    ;others 
    ["cp " to-string source " " to-string target] 
] 

檢查該腳本以及http://www.rebol.org/view-script.r?script=environ.r

如果有,您可以使用其他情況;

switch/default system/version/4 [ 
    2 [] ;mac 
    3 [] ;win 
     ;... 
] [ 
     ;default 
] 
相關問題