FreeBasic Loc Keyword
last modified June 16, 2025
The FreeBasic Loc
keyword returns the current position within
an open file. It is essential for file handling operations where you need
to track or manipulate the file pointer position.
Basic Definition
In FreeBasic, Loc
is a function that returns a Long integer
representing the current position in a file. The position is measured in
bytes from the beginning of the file (position 0).
Loc
works with files opened in binary or random access modes.
It's commonly used with Seek
to navigate through files and
with LOF
to determine file sizes.
Getting Current File Position
This basic example shows how to use Loc
to get the current
position in a file.
Dim f As Integer = FreeFile() Open "test.txt" For Binary As #f Print "Initial position: "; Loc(f) Dim s As String = "Hello" Put #f, , s Print "After writing: "; Loc(f) Close #f
We open a file in binary mode and check the initial position (0). After
writing a string, Loc
returns the new position at the end
of the written data. The position advances automatically during I/O operations.
Comparing Loc with LOF
This example demonstrates the relationship between Loc
and
LOF
(Length Of File).
Dim f As Integer = FreeFile() Open "data.bin" For Binary As #f Print "File size: "; LOF(f) Print "Current position: "; Loc(f) Seek #f, LOF(f) \ 2 Print "Middle position: "; Loc(f) Close #f
We open a binary file and compare its total size (LOF) with the current position (Loc). Then we seek to the middle of the file and verify the new position. This shows how to navigate files using position information.
Random Access File Handling
Loc
is particularly useful when working with random access files.
Type Person name As String * 20 age As Integer End Type Dim f As Integer = FreeFile() Open "people.dat" For Random As #f Len = SizeOf(Person) Dim p As Person p.name = "John Doe" p.age = 30 Put #f, 3, p ' Write to record 3 Print "After write: "; Loc(f) Get #f, 1, p ' Read record 1 Print "After read: "; Loc(f) Close #f
In random access mode, Loc
returns the current record number
rather than a byte position. We write to record 3 and read from record 1,
showing how Loc
tracks our position in the file.
File Position Tracking
This example shows how to use Loc
to track progress through
a file.
Dim f As Integer = FreeFile() Open "largefile.dat" For Binary As #f Dim fileSize As Long = LOF(f) Dim chunk(1023) As Byte Do While Loc(f) < fileSize Get #f, , chunk Print "Progress: "; (Loc(f) * 100) \ fileSize; "%" Loop Close #f
We read a large file in chunks and use Loc
to calculate and
display progress. The percentage shows how much of the file we've processed.
This technique is useful for progress bars in file operations.
Seeking with Loc
This example combines Loc
with Seek
to navigate
through a file.
Dim f As Integer = FreeFile() Open "data.txt" For Binary As #f ' Store initial position Dim startPos As Long = Loc(f) ' Read first 10 bytes Dim header As String * 10 Get #f, , header ' Return to start Seek #f, startPos ' Verify position Print "Position after seek: "; Loc(f) Close #f
We store the initial position, read some data, then return to the start
using Seek
. Loc
verifies our position before
and after seeking. This pattern is useful when you need to re-read data.
Binary File Editing
Loc
helps when making targeted modifications to binary files.
Dim f As Integer = FreeFile() Open "config.cfg" For Binary As #f ' Find signature position Dim sig As String * 4 = "CFG1" Dim foundPos As Long = -1 Dim buf As String * 4 Do While Loc(f) < LOF(f) - 3 Get #f, , buf If buf = sig Then foundPos = Loc(f) - 4 Exit Do End If Loop If foundPos >= 0 Then Print "Signature found at: "; foundPos Seek #f, foundPos + 8 Put #f, , 42 ' Update value Else Print "Signature not found" End If Close #f
We search for a signature pattern in a binary file using Loc
to track our position. When found, we navigate to an offset from the
signature to make an update. This demonstrates precise binary file editing.
Error Handling with Loc
This example shows how to use Loc
in error handling scenarios.
Function ReadFixedString(f As Integer, length As Integer) As String Dim posBefore As Long = Loc(f) Dim result As String = Space(length) Get #f, , result If Loc(f) - posBefore <> length Then Seek #f, posBefore Return "" ' Indicate failure End If Return result End Function Dim f As Integer = FreeFile() Open "test.dat" For Binary As #f Dim data As String = ReadFixedString(f, 10) If data = "" Then Print "Error reading string at position: "; Loc(f) Else Print "Read: "; data End If Close #f
The function attempts to read a fixed-length string and uses Loc
to verify the read was successful. If not, it restores the original position.
This ensures the file pointer remains consistent after errors.
Best Practices
- Binary Mode: Use
Loc
primarily with binary or random access files. - Position Verification: Always verify positions after seeks and large reads.
- Error Recovery: Store positions before operations that might fail.
- Performance: Minimize position checks in tight loops for better performance.
- Combination: Use
Loc
withSeek
andLOF
for full file control.
This tutorial covered the FreeBasic Loc
keyword with practical
examples showing its usage in different file handling scenarios.
Author
List all FreeBasic Tutorials.