Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема_11Запись данных в файл.doc
Скачиваний:
1
Добавлен:
20.12.2018
Размер:
105.98 Кб
Скачать
    1. Запись данных в файл произвольного доступа

Дисковые файлы произвольного доступа значительно отличаются от дисковых файлов последовательного доступа. Файл произвольного доступа рассматривается, как список записей одинаковой длины, каждая из которых может быть прочитана или записана в любой момент времени и в любом порядке.

      1. Чтение и запись файлов произвольного доступа

Файлы произвольного доступа рассматриваются как последовательность записей постоянной длины, причем каждая запись является независимой от всех других записей файла. Длина записи определяется в операторе Open, а тип данных, указанный пользователем, определяет ее содержимое. Файлы произвольного доступа используются в основном для хранения двоичных представлений чисел, а не текстов. Применение двоичных чисел экономит пространство файла по сравнению с символьным представлением тех же чисел. Кроме того, двоичные числа загружаются в память компьютера, значительно быстрее, так как не требуют преобразования перед использованием.

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

Открытие файла произвольного доступа подобно открытию файла последовательного доступа оператором Open, с двумя существенными отличиями: аргумент режима всегда равен Random, а в конце оператора находится аргумент Len = длина_записи.

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

Open имя_файла For Random As файловое_ число len=длина_залиси

где имя_файла — строка, содержащая имя и путь файла, подлежащего открытию;

фаиловое_число — число, которое вы хотите присвоить файлу; длина_записи —длина записи произвольного доступа в байтах.

Примечание:

Оптимальная длина записи должна либо быть кратной размеру дискового сектора, либо делить указанный размер нацело. Большинство дисковых накопителей имеют сектора размером 512 или 1024 байтов; следовательно, оптимальная длина записи должна быть степенью 2, например 32, 64, 128, 256 и т.д. Такая длина является целесообразной потому, что компьютер записывает и читает данные секторами одинаковой длины. Хотя программа может запросить чтение из дискового файла всего одного байта, компьютер на самом деде прочитает в буфер памяти один или более секторов.

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

FileNuinl = FreeFile

Open "myfile.txt" For Random As FileNuinl len = 256

Этот блок кода открывает файл произвольного доступа MYFILE.TXT с записями длиной 256 байтов. Функция FreeFile выбирает свободное файловое число.

      1. Закрытие файла произвольного доступа

Файл произвольного доступа, так же как и последовательный файл, закрывается оператором Close:

Close # файловое_число

где файловое_число — файловое число, указанное при открытии этого файла.

      1. Применение оператора Type для определения записи

Оператора Type, который вы применяли для объявления типа, определяемого пользователем, применяется также для объявления содержимого переменных типа запись, используемых для работ с файлом произвольного доступа. Оператор Type, используемый для объявления переменных типа запись, подобен применяемому для объявления типа, который определяется пользователем, за исключением того, что при объявлении переменных типа запись вы не используете тип Variant и учитываете, что все строковые переменные должны иметь постоянную длину. Максимальная длина записи, определенной оператором Type, должна быть не больше длины записи, объявленной оператором Open. Однако, если вы будете использовать типы меньшей длины, чем объявлено при открытии файла, то при сохранении каждой записи на диске разность между длиной типа и длиной записи будет расходоваться впустую.

Если в операторе Type использовать строки переменной длины, то для указания длины строки потребуются два дополнительных байта на каждую строку. Если использовать переменные типа Variant, то также нужно будет добавить два байта (для задания типа) к байтам, содержащим значение переменной. Если вы используете строки переменной длины и переменные типа Variant в типе, который должен был сохранен в записи, то общая длина типа всегда должна быть не больше длины записи в противном случае получите ошибку. Поскольку невозможно быть уверенным в том, что общая длина переменных в записи будет соответствовать данному условию, длин; каждой переменной обычно объявляется в типе.

Так, приведенный ниже оператор Type из программы работы с базой данных персональных контактов определяет запись длиной в 256 байтов. Каждая строка имеет постоянную длину, что в обычном операторе Type не требуется.

Type DBEntry 'Определяет структуру записи базы данных.

Name Аз String * 25

Address As String * 25

City As String * 15

State As String * 2

Zip As String * 10

Phone As String * 20

Net As String * 10

NetAddr As String * 25

Referral As String * 25

Notes Аз String * 97

RecNo As Integer

End Type 'Размер типа 256 байтов.

Чтобы узнать длину типа, определяемого пользователем, необходимо либо сложить длины всех переменных, либо объявить переменную указанного типа, а затем применить к ней функцию Len(). Например, если вы запустите процедуру Initializelt базы данных персональных контактов с контрольной точкой после объявления массива theDB(), а затем используете функцию Len():

А=Len(theDB(l))

и получем А=256

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]