Random
 
Задает файл или устройство, которые будут открыты в двоичном режиме

Синтаксис

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.

См. также