Задает файл или устройство, которые будут открыты в двоичном режиме
Синтаксис
Open filename for Random [Access access_type] [Lock lock_type] as [#]filenum [Len = record_length]
Параметры
filename
имя файла для открытия
access_type
указывает на то, что файл может быть открыт для чтения,
записи или чтения и записи
lock_type
блокировка, используемая при открытом файле
filenum
доступный номер файла, связываемый с открытым файлом
record_length
Размер записи, используемый для файла
Описание
Открывает файл или устройство для чтения или записи двоичных данных в
указанном файле
filenum, с размером записи
record_length.
Если файл не существует, будет создан новый файл, в противном случае
сохраняются любые данные в файле, открытые с помощью
Open. Инициализируется указатель файла, открытого с помощью
Open
, в начале файла, номер записи
1. Файловые операции перемещают
позицию файла в шагах
record_length байт.
Этот режим файла использует определяемую пользователем
Type
переменную буфера для чтения и записи полной записи в файле. Переменная
буфера использует включение несколько полей.
Данные сохраняются в двоичном режиме. FreeBASIC использует внутренний
формат, посредством
Get # и
Put #.
filename должно быть строковым выражением имени файла в целевой
ОС, без шаблонов. Файл ищется в текущем каталоге, если путь не указан.
Access_type - По умолчанию режим
Random
позволяет читать и писать в файл, если только спецификатор
Access
явно не указывает на определенный доступ :
- Read - файл открывается только для ввода
- Write - файл открывается только для вывода
- Read Write - файл открывается для ввода и вывода (по
умолчанию)
Lock_type указывает блокировку файла для других
процессов (пользователей или потоков). Может быть:
- Shared - файл может быть свободно доступен для
других процессов
- Lock Read - файл не может быть открыт одновременно для
чтения
- Lock Write - файл не может быть открыт одновременно для
записи
- Lock Read Write - файл не может быть открыт одновременно
другими процессами.
Если тип блокировки не указан, то файл будет
Shared
для других потоков программы и
Lock Read Write для
других программ.
Lock и
Unlock
могут быть использованы для временного ограничения доступа к части
файла.
filenum является допустимым FreeBASIC номером файла (в
диапазоне
1..255) , не используемым для любого другого открытого
файла в настоящее время. Это число определяет файл для остальной части
файловых операций. Свободный файловый номер можно получить с помощью функции
FreeFile.
record_length - это количество байт, на которые будет сдвигаться
указатель файла при использовании
Get
и
Put, оно должно соответствовать
размеру используемой переменной буфера, когда
Get(читаются)
и
Put(пишутся) данные. Если
параметр опущен, то по умолчанию
128.
Пример
'' В этом примере создается тестовый файл и затем
позволяет вам просматривать рандомные записи
'' которые считываются из файла.
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)
'' Записываем 9 записей с предопределенными данными
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"
'' Пользователь может просматривать записи, указав их
порядковый номер
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
Type ScoreEntry Field = 1
As String * 20 Name
As Single score
End Type
Dim As ScoreEntry entry
'' Создаем примитивный файл
рекордов
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
'' Считываем и выводим записи
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
Отличия от QB
- Необходимо соблюдать осторожность с динамическими строками или строками
фиксированной длины внутри определяемых пользователем типов (UDT), см.
предупреждение в KeyPgType.
- Ключевое слово Field может быть
использовано только с Type для указания
упаковки UDT.
См. также