File streams have the same protocol as CLDT Streams. For the complete set of methods supported by the Stream class, see "Stream classes". The following example uses a CfsReadFileStream to read data from an existing file, and a CfsWriteFileStream to write the data to a newly created file.
| oldData newData | (oldData := CfsReadFileStream open: 'oldData.txt') isCfsError ifTrue: [^self error: oldData message]. (newData := CfsWriteFileStream openEmpty: 'newData.txt') isCfsError ifTrue: [^self error: newData message].
newData nextPutAll: oldData contents. oldData close. newData close.
Note: | The indexing methods for file streams answer and accept the byte position in
the file, not the character position. In contrast, the
indexing operations of CLDT Streams answer and accept character
positions in the buffer being streamed over. When file streams are used
with single-byte characters exclusively, the character position and byte
positions are the same. However, this is not the case when a mixture of
single and double-byte characters are used.
When used with file streams, the copyFrom:to:, position, position:, size, and skip: messages operate based upon byte indexes and sizes, not character and sizes. The other file stream operations operate in the same manner as the CLDT Stream protocols. For portability, use the next and next: protocols for stream positioning. |