Функции управления указателем в файле
Функция позволяет работать с файлом как с массивом. Достигать любого байта.
int fseek(FILE *stream, смещение, start)
Возвращает число типа int:
0 - если все хорошо;
-1 - ошибка.
Смещение – это количество байт на которое нужно сместить указатель по файлу с +(вперед), -(назад);
start - код начальной точки:
SEEK_SET или 0 – от начала файла;
SEEK_END или 2 – от конца файла;
SEEK_CUR или 1 – от текущего положения курсора.
fseek(in,0,0) - установить курсор на начало файла.
long int ftell(FILE *stream)- возвращает текущее положение курсора в файле.
19.7 Ввод/вывод записей фиксированной длины
Под записью фиксированной длины можно понимать размер элемента массива или структуры.
1. Чтение данных из двоичного файла.
int fread(void *ptr, size type, size n, FILE *stream)
void *ptr – адрес массива, куда записываются данные;
size type – размер типа в байтах;
size n – количество данных;
FILE *stream – указатель на файл.
void main(void){
struct STOK record;
FILE *in;
in=fopen("data", "r");
int n=fread(&record, sizeof(record), 1, in);
}
Возвращает число считанных записей или EOF.
void main(void){
float mas[100];
FILE *in;
In=fopen("data", "rb");
fread(mas, sizeof(mas), 1, in);
} //можно так - fread(mas, sizeof(float), 100, in);
2. запись данных в двоичный файл.
int fwrite(void *ptr, size type, size n, FILE *stream)
Возвращает число записанных байт.
void *ptr – адрес массива, куда записываются данные;
size type – размер типа в байтах;
size n – количество данных;
FILE *stream – указатель на файл.
fwrite(mas, sizeof(mas), 1, in);
Пример 1. Запись во временный файл и чтение из него в массив.
#include <stdio.h>
#include <stdlib.h>
void main(void) {
int array[100];
//создать временный файл
FILE *tempf=tmpfile();
if(!tempf) {
puts(“нельзя открыть временный файл”);
exit(1);
}
for(int index=0; index<100; index++)//пишем в файл
fwrite(array,sizeof(int),1,tempf);
rewind(tempf); //указатель вернуть на начало
fread(array,sizeof(int),100,tempf);
rmtmp(); //закрыть и уничтожить временный файл
}
Пример 2. Проверить конец файлового потока
void main(void) {
int buff[100];
FILE *fp;
fp=fopen(“prog.txt”,”r”);
if(!fp) {
puts(“нельзя открыть файл”);
}
else {
while(!feof(fp))
if(fgets(buff,100,fp)!=NULL)
fputs(buff,stdout);
fclose(fp);
}
}
ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ
Многие задачи программирования используют динамические структуры данных. Например, организация каталога книг в библиотеке. Нельзя заранее определить количество книг, числящихся в библиотечном фонде, так как идет постоянное поступление новых книг и списание старых. Для реализации таких задач существуют различные связные списки: однонаправленные, двунаправленные; бинарные деревья и т.д.
Дата добавления: 2018-11-25; просмотров: 253;