File input/output: Difference between revisions

Added Toka
No edit summary
(Added Toka)
Line 781:
#close the file
close $myfile
 
==[[Toka]]==
[[Category:Toka]]
This is one method, which works with any type of file:
 
( source dest -- )
{
variable| source dest size buffer |
[ "W" file.open dest !
"R" file.open source !
] is open-files
[ source @ dest @ and 0 <> ] is check
[ source @ file.size size !
size @ malloc buffer !
] is get-size
[ source @ buffer @ size @ file.read drop ] is read-source
[ dest @ buffer @ size @ file.write drop ] is write-dest
[ source @ dup 0 <> [ file.close 0 ] ifTrue drop
dest @ dup 0 <> [ file.close 0 ] ifTrue drop
] is close-files
[ open-files check [ get-size read-source write-dest close-files ] ifTrue ]
} is copy-file
 
And a much simpler way for plain text files, making use of file.slurp:
 
[ ( source dest -- )
swap file.slurp dup 0 <>
[ >r "W" file.open dup r> count 1- file.write drop file.close ] ifTrue
] is copy-file
 
And a test:
 
" input.txt" " output.txt" copy-file
 
==[[UNIX Shell]]==
Anonymous user