Random
Specifies file or device to be opened for binary mode
filename
Opens a file or device for reading and/or writing binary data in the given file filenum, with records of size record_length.
If the file does not exist, a new file will be created, otherwise any data existing in the file is preserved by Open. The file pointer is initialized by Open at the start of the file, at record number 1. File operations move the file position in steps of record_length bytes.
This file mode uses an user-defined Type buffer variable to read/write full records in a file. The buffer variable uses to include several fields.
The data is saved in binary mode, in the same internal format FreeBASIC uses, by means of Get # and Put #.
filename must be string expression resulting in a legal file name in the target OS, without wildcards. The file will be sought for in the present directory, unless a path is given.
Access_type - By default Random mode allows to both read and write the file, unless an Access type is specified, it must be one of:
record_length is the amount of bytes the file pointer will move for each individual Get and Put, it must match the size of the buffer variable used when Getting and Putting data. If omitted, it defaults to 128.
Syntax
Parameters
filename
file name to open
access_typeindicates whether the file may be read from, written to or both
lock_typelocking to be used while the file is open
filenumunused file number to associate with the open file
record_lengththe size of the record used for the file
Description
Opens a file or device for reading and/or writing binary data in the given file filenum, with records of size record_length.
If the file does not exist, a new file will be created, otherwise any data existing in the file is preserved by Open. The file pointer is initialized by Open at the start of the file, at record number 1. File operations move the file position in steps of record_length bytes.
This file mode uses an user-defined Type buffer variable to read/write full records in a file. The buffer variable uses to include several fields.
The data is saved in binary mode, in the same internal format FreeBASIC uses, by means of Get # and Put #.
filename must be string expression resulting in a legal file name in the target OS, without wildcards. The file will be sought for in the present directory, unless a path is given.
Access_type - By default Random mode allows to both read and write the file, unless an Access type is specified, it must be one of:
- Read - the file is opened for input only
- Write - the file is opened for output only
- Read Write - the file is opened for input and output (the default)
- Shared - The file can be freely accessed by other processes
- Lock Read - The file can't be opened simultaneously for reading
- Lock Write - The file can't be opened simultaneously for writing
- Lock Read Write - The file cannot be opened simultaneously by other processes.
If no lock type is stated, the file will be Shared for other threads of the program and Lock Read Write for other programs.
Lock and Unlock can be used to restrict temporally access to parts of a file.
filenum is a valid FreeBASIC file number (in the range 1..255) not being used for any other file presently open. This number identifies the file for the rest of file operations. A free file number can be found using the FreeFile function.Lock and Unlock can be used to restrict temporally access to parts of a file.
record_length is the amount of bytes the file pointer will move for each individual Get and Put, it must match the size of the buffer variable used when Getting and Putting data. If omitted, it defaults to 128.
Example
'' This example generates a test file and then lets you view random records
'' that are read live from the file.
Type Entry
slen As Byte
sdata As String * 10
End Type
Dim u As Entry
Dim s As String
Open "testfile" For Random As #1 Len = SizeOf(Entry)
'' Write out 9 records with predefined data
For i As Integer = 1 To 9
Read s
u = Type( Len(s), s )
Put #1, i, u
Next
Data ".,-?!'@:", "abc", "def"
Data "ghi", "jkl", "mno"
Data "pqrs", "tuv", "wxyz"
'' Let the user view records by specifying their index number
Do
Dim i As Integer
Input "Record number: ", i
If i < 1 Or i > 9 Then Exit Do
Get #1, i, u
Print i & ": " & Left( u.sdata, u.slen )
Print
Loop
Close #1
'' that are read live from the file.
Type Entry
slen As Byte
sdata As String * 10
End Type
Dim u As Entry
Dim s As String
Open "testfile" For Random As #1 Len = SizeOf(Entry)
'' Write out 9 records with predefined data
For i As Integer = 1 To 9
Read s
u = Type( Len(s), s )
Put #1, i, u
Next
Data ".,-?!'@:", "abc", "def"
Data "ghi", "jkl", "mno"
Data "pqrs", "tuv", "wxyz"
'' Let the user view records by specifying their index number
Do
Dim i As Integer
Input "Record number: ", i
If i < 1 Or i > 9 Then Exit Do
Get #1, i, u
Print i & ": " & Left( u.sdata, u.slen )
Loop
Close #1
Type ScoreEntry Field = 1
As String * 20 Name
As Single score
End Type
Dim As ScoreEntry entry
'' Generate a fake boring highscore file
Open "scores.dat" For Random Access Write As #1 Len = SizeOf(entry)
For i As Integer = 1 To 10
entry.name = "Player " & i
entry.score = i
Put #1, i, entry
Next
Close #1
'' Read out and display the entries
Open "scores.dat" For Random Access Read As #1 Len = SizeOf(entry)
For i As Integer = 1 To 10
Get #1, i, entry
Print i & ":", entry.name, Str(entry.score), entry.score
Next
Close #1
As String * 20 Name
As Single score
End Type
Dim As ScoreEntry entry
'' Generate a fake boring highscore file
Open "scores.dat" For Random Access Write As #1 Len = SizeOf(entry)
For i As Integer = 1 To 10
entry.name = "Player " & i
entry.score = i
Put #1, i, entry
Next
Close #1
'' Read out and display the entries
Open "scores.dat" For Random Access Read As #1 Len = SizeOf(entry)
For i As Integer = 1 To 10
Get #1, i, entry
Print i & ":", entry.name, Str(entry.score), entry.score
Next
Close #1
Differences from QB
See also