/ Published in: R
Expand |
Embed | Plain Text
copy-dir: func [source dest] [ source: to-rebol-file source dest: to-rebol-file dest if not exists? dest [make-dir/deep dest] foreach file read source [ either find file "/" [ copy-dir source/:file dest/:file ][ print file write/binary dest/:file read/binary source/:file ] ] ] Folder?: function [ "Returns the path's folder or enclosing directory." Path [file! url!] ] [Name] [ all [ Name: find/last Path File-Name? Path Path: copy/part Path Name either empty? Path [none] [Path] ] ] foreach-file: func [ "Perform function on each file in selected directory recursively" dir [file! url!] "Directory to look in" act [function!] "Function to perform (filename is unput to fuction)" /directory "Perform function also on directories" /local f files ][ if not equal? last dir #"/" [ dir: to-rebol-file join dir #"/" ] files: attempt [read dir] either none? files [return][ foreach file files [ f: join dir file either dir? f [ either directory [ act f foreach-file/directory f :act ][ foreach-file f :act ] ][act f] ] ] ] copy-file: func [ "Copy a file. Return WORD for failure or return optional checksum." from [file!] dest [file!] /sum "checksum the data" /local data path ff ; from file port tf ; to file port starttime; endtime; elapsedtime; ][ ;from: to-rebol-file from ;dest: to-rebol-file dest starttime: now/time path: split-path dest foreach [block err-word] [ [make-dir/deep path/1] dir-failed [ff: open/binary/read/seek from] read-failed [tf: open/binary/write dest] write-failed [if sum [sum: open [scheme: 'checksum]]] sum-failed [ while [not tail? ff] [ ;print index? ff data: copy/part ff 100000 insert tail tf data if sum [insert sum data] ff: skip ff length? data ] ;print index? ff ] copy-failed ][ if error? try block [ if port? sum [close sum] if tf [close tf] if ff [close ff] return err-word ] ] data: none if sum [ update sum data: copy sum close sum ] close tf close ff endtime: now/time elapsedtime: endtime - starttime print elapsedtime data ; checksum value or none ]
You need to login to post a comment.
