ВУЗ:
Составители:
Рубрика:
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:
Страницы
- « первая
- ‹ предыдущая
- …
- 74
- 75
- 76
- 77
- 78
- …
- следующая ›
- последняя »
