|
file_stream - file handle returned by ReadFile, WriteFile or OpenFile pos - new position, in bytes from the start of the file (0 = first byte; must not be negative) |
|
Moves the read/write position within a file. Returns the new position, or -1 if the seek failed. This is what turns a file from a one-way tape into random-access storage: jump straight to the record you want instead of reading everything before it. To find an offset, count bytes: an int is 4 bytes, a float 4, a short 2, a byte 1. A file of ints has its 7th value at offset (7-1)*4 = 24. Fixed-size records make this arithmetic trivial; strings do not, because their size depends on their contents - which is why formats you plan to seek around in should stick to fixed-size fields. Seeking beyond the end of the file is not an error, but there is nothing there: reads return zeros and empty strings. A negative position raises a runtime error. See also: FilePos, OpenFile, ReadFile, WriteFile. |
; SeekFile Example
; ----------------
; Save best scores for levels 1 to 5 (one 4-byte integer each)
file=WriteFile("demo_scores.dat")
For level=1 To 5
WriteInt file,level*1000
Next
CloseFile file
Print "Saved scores 1000..5000 for levels 1 to 5"
; SeekFile jumps straight to a byte offset in the file.
; The Nth integer sits at offset (N-1)*4, so level 4 is at offset 12
file=ReadFile("demo_scores.dat")
SeekFile file,(4-1)*4
Print "Level 4 score: "+ReadInt(file)
; Seek back to the start and read level 1
SeekFile file,0
Print "Level 1 score: "+ReadInt(file)
CloseFile file
; Clean up the demo file
DeleteFile "demo_scores.dat"
Print "Deleted demo_scores.dat"
Print ""
Print "Press any key to close the example"
WaitKey
End