Функции управления указателем в файле

 

Функция позволяет работать с файлом как с массивом. Достигать любого байта.

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;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.