2013-10-15 3 views
3

Rebol에는 make-dir, what-dir, rename, create-link 등과 같은 디렉토리 및 파일 관리를위한 단어가 있습니다. 그러나 파일을 다른 위치 나 새로 파일로 간단히 복사 할 수는 없습니다 생성 된 파일.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/리눅스 민트)에 이식 할 수 없습니다 : 순간

, 나는 기본 OS를 호출 할 수는 모든 유닉스에서 실행됩니다, 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 

(참고 :이 답변입니다 REBOL 2)

+0

잘 작동했습니다. 감사합니다! – Pierre

+0

좋은 대답, 제안 된 코드는 완벽하게 작동합니다. 하지만 표준 Rebol 코딩 규칙 (http://www.rebol.com/docs/core23/rebolcore-5.html#section-5.2)을 위반하는 비표준 코딩 스타일 ('bytes_per')을 사용합니다. .3) 단어 이름 지정. 공개 Rebol 코드에서는 게시 된 코딩 규칙을 준수하고 대신 **'bytes-per' **를 사용하는 것이 좋습니다. – earl

+0

@ the 코딩 스타일은 적용되지 않습니다. 그들은 단지 지침 일뿐입니다. 변수를 사용하는 방법에 따라 대시와 밑줄을 선택합니다. 귀하의 편집본은 [Meta에 이전되었습니다] (http://meta.stackexchange.com/questions/200172/style-changes-in-edits). – Izkata

1

당신은 또한 당신의 스크립트가 실행되는 OS가 감지 시스템/버전을 사용할 수 있습니다에 :

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 
]