Файлы с произвольным доступом

 

Открытие файла

Open ИмяФайла For Random [Access доступ] [блокировка] _
As #ДескрипторФайла Len= ДлинаЗаписи

Где: - Random – определяет режим доступа к данным - произвольный;

- Accessпозволяет задать права доступа к открываемому файлу. Параметр Доступ задается константами: Read – только для чтения, Write – только на запись, Read Write – чтение и запись (действует по умолчанию);

- Блокировка позволяет определить права доступа к данным файла при многопользовательской работе. Параметр может принимать значения:

ü Shared – файл может использоваться всеми пользователями для чтения и записи;

ü Lock Read – запрещает другим пользователям считывать данные этого файла;

ü Lock Write – запрещает другим пользователям записывать данные в этом файл;

ü Lock ReadWrite – запрещает другим пользователям считывать и записывать в файл.

- ДлинаЗаписи - целое число. Оно должно быть равно длине переменной пользовательского типа, которая применяется для хранения одной записи файла. Если это значение меньше длины записи, то возникает ошибка, если больше, то будет использоваться больше дискового пространства.

 

Закрытие файла

См. закрытие текстовых файлов.

Запись в файл

Для включения в файл произвольного доступа новой записи используется оператор:

Put # ДескрипторФайла[, НомерЗаписи], ИмяПеременной

НомерЗаписи - это номер (целое положительное число), который будет иметь запись, помещаемая в файл. Если номер записи не указан, то запись данных осуществляется в текущую запись (текущая запись – это запись на которой позиционирован указатель).

ИмяПеременной - это имя переменной пользовательского типа, значением которой является запись, помещаемая в файл.

 

Чтение из файла

Для извлечения записи из файла произвольного доступа применяется оператор:

Get # ДескрипторФайла[, НомерЗаписи], ИмяПеременной

Где:

НомерЗаписи - это номер извлекаемой из файла записи. Если номер не указан, считывается текущая запись.

ИмяПеременной - это имя переменной пользовательского типа, значением которой является запись, извлекаемая из файла.

Пример решения задачи создания и обработки файла прямого доступа:

Private Type ДанныеСтудент

Фамилия As String * 15

Имя As String * 10

Группа As String * 4

ОцМатем As Integer

ОцИнфор As Integer

ОцФилос As Integer

End Type

Private Sub Command1_Click()

Dim Студент As ДанныеСтудент, i As Integer

Open "danst" For Random As #1 Len = Len(Студент)

For i = 1 To 5

Студент.Фамилия = InputBox("Фамилия")

Студент.Имя = InputBox("Имя")

Студент.Группа = InputBox("Группа")

Студент.ОцМатем = Val(InputBox("Оценка по математике"))

Студент.ОцИнфор = Val(InputBox("Оценка по информатике"))

Студент.ОцФилос = Val(InputBox("Оценка по философии"))

Put #1, i, Студент

Next

Close 1

End Sub

Private Sub Command2_Click()

Dim Студент As ДанныеСтудент, i As Integer

Open "danst" For Random As #1 Len = Len(Студент)

Print

For i = 1 To LOF(1)/Len(Студент)

Get #1, i, Студент

Print " " & Trim(Студент.Фамилия) & " " & _ Trim(Студент.Имя) & " " & Trim(Студент.Группа)

Next i

Close #1

End Sub