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]]== |