Основы языка С++. Викентьева О.Л. - 76 стр.

UptoLike

Составители: 

FILE *f;
int n;
if((f=fopen(“int.dat”,”w”))==0)
{
perror(“int.dat”);
exit(0);
}
for(n=1;n<11;n++)
fprinf(f,”\n%d %d”,n,n*n);
fclose(f);
if((f=fopen(“int.dat”,”r”))==0)
{
perror(“int.dat”);
exit(1);
}
int nn;
while(fscanf(f, ”%d%d”,&n,&nn))
printf(“\n%d %d”,n,nn);
fclose(f);
}
23.8. Прямой доступ к файлам
Рассмотренные ранее средства обмена с файлами позволяют записывать и считы-
вать данные только последовательно. Операции чтения/записи всегда производятся, начи-
ная с текущей позиции в потоке. Начальная позиция устанавливается при открытии пото-
ка и может соответствовать начальному или конечному байту потока в зависимости от ре-
жима открытия файла. При открытии потока в режимах “r” и “w” указатель текущей пози-
ции устанавливается на начальный байт потока, при открытии в режиме “a” - за послед-
ним байтом в конец файла. При выполнении каждой операции указатель перемещается на
новую текущую позицию в соответствии с числом записанных/прочитанных байтов.
Средства прямого доступа дают возможность перемещать указатель текущей
позиции в потоке на нужный байт. Для этого используется функция
int fseek(FILE *f, long off, int org), где
FILE *f - – указатель на файл,
long off – позиция смещения
int org – начало отсчета.
Смещение задается выражение или переменной и может быть отрицательным, т. е.
возможно перемещение как в прямом, так и в обратном направлениях. Начало отсчета за-
дается одной из определенных в файле <stdio.h> констант:
SEEK_SET ==0 – начало файла;
SEEK_CUR==1 – текущая позиция;
SEEK_END ==2 – конец файла.
Функция возвращает 0, если перемещение в потоке выполнено успешно, иначе воз-
вращает ненулевое значение.
Примеры:
fseek(f,0L,SEEK_SET); //перемещение к началу потока из текущей позиции
fseek(f,0L,SEEK_END); //перемещение к концу потока из текущей позиции
fseek(f,-(long)sizeof(a),SEEK_SET); //перемещение назад на длину переменной а.
Кроме этой функции, для прямого доступа к файлу используются:
long tell(FILE *f);//получает значение указателя текущей позиции в потоке;
void rewind(FILE *f);//установить значение указателя на начало потока.
23.9. Удаление и добавление элементов в файле
Пример 1:
      FILE *f;
      int n;
      if((f=fopen(“int.dat”,”w”))==0)
      {
      perror(“int.dat”);
      exit(0);
      }
      for(n=1;n<11;n++)
      fprinf(f,”\n%d %d”,n,n*n);
      fclose(f);
      if((f=fopen(“int.dat”,”r”))==0)
      {
      perror(“int.dat”);
      exit(1);
      }
      int nn;
      while(fscanf(f, ”%d%d”,&n,&nn))
      printf(“\n%d %d”,n,nn);
      fclose(f);
      }

                                    23.8. Прямой доступ к файлам
       Рассмотренные ранее средства обмена с файлами позволяют записывать и считы-
вать данные только последовательно. Операции чтения/записи всегда производятся, начи-
ная с текущей позиции в потоке. Начальная позиция устанавливается при открытии пото-
ка и может соответствовать начальному или конечному байту потока в зависимости от ре-
жима открытия файла. При открытии потока в режимах “r” и “w” указатель текущей пози-
ции устанавливается на начальный байт потока, при открытии в режиме “a” - за послед-
ним байтом в конец файла. При выполнении каждой операции указатель перемещается на
новую текущую позицию в соответствии с числом записанных/прочитанных байтов.
               Средства прямого доступа дают возможность перемещать указатель текущей
позиции в потоке на нужный байт. Для этого используется функция
       int fseek(FILE *f, long off, int org), где
       FILE *f - – указатель на файл,
       long off – позиция смещения
       int org – начало отсчета.
       Смещение задается выражение или переменной и может быть отрицательным, т. е.
возможно перемещение как в прямом, так и в обратном направлениях. Начало отсчета за-
дается одной из определенных в файле  констант:
       SEEK_SET ==0 – начало файла;
       SEEK_CUR==1 – текущая позиция;
       SEEK_END ==2 – конец файла.
       Функция возвращает 0, если перемещение в потоке выполнено успешно, иначе воз-
вращает ненулевое значение.
       Примеры:
       fseek(f,0L,SEEK_SET); //перемещение к началу потока из текущей позиции
       fseek(f,0L,SEEK_END); //перемещение к концу потока из текущей позиции
       fseek(f,-(long)sizeof(a),SEEK_SET); //перемещение назад на длину переменной а.
       Кроме этой функции, для прямого доступа к файлу используются:
       long tell(FILE *f);//получает значение указателя текущей позиции в потоке;
       void rewind(FILE *f);//установить значение указателя на начало потока.

                      23.9. Удаление и добавление элементов в файле
      Пример 1: