Пример 2. (считывает информацию из готового файла на экран)



#include <iostream>using namespace std;int main(){ FILE *f;   int c; char *filename="t.txt"; if ((f=fopen(filename,"r"))==0) perror(filename); else     while((c = fgetc(f)) != EOF) putchar(c); //вывод с на стандартное устройство вывода fclose(f); system("pause"); return 0;}

2) Блоковый ввод-вывод (используется при работе с массивами и структурами)

Для блокового ввода-вывода используются функции прямого доступа.

Функции блокового ввода-вывода позволяют выполнять перенос между файлом и программой фиксированных блоков байтов, или записей (records). Блок – группа расположенных подряд байтов, не имеющих никаких специальных разделителей (форматирующих знаков). За одно обращение к таким функциям переносится блок размером n*size байт.

Блоковый ввод:

Блоковый ввод выполняет функция вида

int fread (ptr, size, n, fp);

которая считывает n элементов размером size байт каждый из открытого файла с указателем fp в область памяти, определяемую указателем ptr. В случае успеха возвращает число прочитанных элементов (не байтов!), иначе возвращается EOF.

 

int fread(void *ptr, int size, int n, FILE *f);

где void *ptr – указатель на область памяти, в которой размещаются считанные из файла данные;

int size – размер одного считываемого элемента;

int n – количество считываемых элементов;

FILE *f – указатель на файл, из которого производится считывание.

В случае успешного считывания функция возвращает количество считанных элементов, иначе – EOF.

Блоковый вывод:

Блоковый вывод выполняет функция вида:

int fwrite (ptr, size, n, fp);

которая записывает n элементов размером size байт каждый из области памяти, определяемой указателем ptr, в открытый файл с указателем fp. В случае успеха возвращает число записанных элементов (не байтов!), иначе возвращается EOF.

             int fwrite(void *ptr ,int size, int n, FILE *f);

где void *ptr – указатель на область памяти, в которой размещаются считанные из файла данные;

int size – размер одного записываемого элемента;

int n – количество записываемых элементов;

FILE *f – указатель на файл, в который производится запись.

В случае успешной записи функция возвращает количество записанных элементов, иначе – EOF.

 

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

int n, i;
double a;
FILE *f;
f=fopen(«D:\\game\\noobs.dat», «rb»);
for (i=0; i<15; i++)
fread(&a, sizeof(double), 1, f);
fclose(f);
f=fopen(«D:\\game\\noobs.dat», «rb»);
fread(&a, sizeof(double), 1, f);
fclose(f);

Как видно, такое чтение чисел из файла, а затем повторное открытие файла — не самый удобный способ. Гораздо удобнее будет использовать функции прямого доступа к любому значению в файле. Подробнее о данных функциях можно ознакомиться: http://blog.kislenko.net/show.php?id=1401

 

3) Форматированный ввод-вывод

В некоторых случаях информацию удобно записывать в файл без преобразования, т.е. в символьном виде, пригодном для непосредственного отображения на экран. Для этого можно использовать функции форматированного ввода-вывода& Функции fscanf() и fprintf() аналогичны функциям scanf() и printf(), но работают с файлами данных, и имеют первый аргумент — указатель на файл.

 

fprintf(поток, "ФорматВывода", аргументы);

fprintf(FILE *f, const char *fmt, ...);

где FILE*f – указатель на файл, в который производится запись;

const char *fmt – форматная строка, включая спецификаторы;

par1, par2, ... – список переменных, в которые заносится информация из файла.

 

fscanf(поток, "ФорматВвода", аргументы);

fscanf (FILE *f, const char *fmt, ...);

где FILE*f – указатель на файл, из которого производится считывание;

const char *fmt – форматная строка, включая спецификаторы;

&par1, &par2, ... – список ссылок переменных, значение которых считывается

Пример работы с файлами с использованием описанных функций:

 


Дата добавления: 2022-12-03; просмотров: 23; Мы поможем в написании вашей работы!

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






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