File input/output: Difference between revisions

Content added Content deleted
No edit summary
(Added Toka)
Line 781: Line 781:
#close the file
#close the file
close $myfile
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]]==
==[[UNIX Shell]]==