Обработка двоичных файлов . Последовательный и произвольный доступ. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Обработка двоичных файлов . Последовательный и произвольный доступ.



Двоичные файлы в формате *.dat. Хранение информации в двоичном файле позволяет существенно ускорить время считывания и записи. Существует 2 способа доступа к элементам двоичных файлов: последовательный и произвольный.

Последовательный: использование как правило для перебора всех данных хранящихся в файле. Заполнение пустых файлов так же возможно только в последовательном. Для открытия и закрытия двоичных файлов используют функции fopen и fclose. Но не всем режимам доступа следует добавлять букву b. Для записи в файл используется функция fwrite, чей прототип находится в файле <stdio.h>. Заголовок функции имеет вид: size_t fwrite(const void *ptr,size_t size. Size_t n,FILE *stream)

Параметры:

Void *ptr – указатель на исходные данные, записываемые в FILE

Size_t size – размер в байтах одного элемента данных.

Size_t n – число записываемых в файл элементов данных, размером size байт каждый.

File *stream – указатель на файловый поток открытых в двоичном режиме.

Void main ()

{FILE *giena;

Int mass[100];

Giena=fopen(“ttt.dat”,”wb”);

For (int i=0;i<100;i++)

Mass[i]=i*I;

Fwrite(mass,sizeof(int),100,giena);

Fclose(giena);}

Произвольный доступ.

Организация произвольного доступа к компонентам файла позволяет считывать значения из любой позиции файла, а так же записывать новую информацию в любое место в файле. Все компоненты файлов с произвольным доступом должны иметь одинаковую длину. Для изменения места файла, откуда будет производиться операция чтения или записи служит функция fseek. Ее прототип содержится в файле <stdio.h>, а заголовок имеет вид: int fseek(File *stream,long offset,intwhence)

Параметры:

File *stream – указатель на открытый файловый поток.

Long offset – число байтов, на которое нужно перемещения в обратную сторону offset должен быть отрицанием.

Int whence – указатель на положение точки отсчета от которого будет происходить перемещение файлового указателя.

Void main ()

{FILE *giena;

Int x;

Giena=fopen(“ttt.dat”,”rb”);

Fseek (giena,25*sizeof(int),SEEK_SET);

Fread (&x,sizeof(int),1,giena);

Printf (“Прочитано 25е число:%d\n”,x);

Fclose(giena);}

 

Аргументы используемые по умолчанию.-

В языке Си++ в прототипе функции существует возможность указать значение по умолчанию для некоторых параметров. Это позволит пропускать соответствующие аргументы при вызове функции, а на их место компилятор подставит указанные при описании значения. Параметр со значением по умолчанию должен стоять после всех остальных в списке, если при вызове функции параметр опускается, то нужно опустить и все последующие аргументы.

Void otchisl (char *gruppa,int n=26,int k=0);

Oychisl (“i-2-4”);

 

Использование ссылок.

В си++ используется видоизмененная форма указателя, называемая ссылкой. Для ссылки не требуется дополнительного пространства памяти, так как она является по сути другим именем переменной. Для описания ссылки используется:

Int &k;

Main ()

{int t;

Int &sh=t;}

Основное предназначение ссылок состоит в применении их для параметров функции и для типов возвращаемых значений файлов. В ссылке после инициализации не может быть присвоена другая переменная. При передаче параметров по ссылке вызов функции синтаксически никак не отличается от вызова передачи по значению.

 

#include <stdio.h>

Const int j=10;

Int mass[j];

Int &aaa (int i)

{return mass[i];}

Void Main ()

{for (int i=1;i<j;i++)

Aaa(i)=i*I;

For (i=1;i<j;i++)

Printf (“mass[%d]=%d\n”,I,aaa(i));

Ссылка может быть использована как тип возвращаемой функции, что позволит «присваивать функции значение».

 


Встроенные функции.-


В Си++ при определении функции можно использовать слово inline, оно предписывает компилятору помещать расширение тела функции везде, где происходит обращение к ней вместо того, чтобы генерировать код вызова.

Обычно встроенными делаются малые по размеру функции, так как их использование делает текст программы больше, хотя такая программы выполняется быстрее. На содержимое функции, объявляем как inline сущ. список ограничений, так не допускается inline для функций принимающих оператор цикла, операторы switch и goto можно. Кроме того определение встроенной функции должно обязательно предшествовать ее вызову. Кроме того компилятор может без всякого предупреждения проигнорировать inline.

 



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 252; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.14.70.203 (0.006 с.)