6.12  Выполнение операций чтения и записи

Все рассмотренные нами программы выполняли файловые операции над символьными строками, однако такие операции могут выполняться над массивами и структурами данных. В этом случае используются функции read() и write().

При использовании функций read() и write() следует использовать буфер данных, в котором данные будут накапливаться, а затем переписываться. Размер буфера определяется операцией sizeof():

input_file.read(buffer, sizeof(buffer)) ;

output_file.write(buffer, sizeof(buffer));

Следующая программа STRU_OUT.CPP использует функцию write() для вывода содержимого структуры в файл EMPLOYEE.DAT:

#include <iostream.h>

#include <fstream.h>

void main(void)

{

struct employee

{

char name[64];

int age;

float salary;

} worker = { "Джон Дой", 33, 25000.0 };

ofstream emp_file("EMPLOYEE.DAT") ;

emp_file.write((char *) &worker, sizeof(employee));

}

Функция write() обычно получает указатель на символьную строку. Символы (char *) представляют собой оператор приведения типов, который информирует компилятор, что передается указатель на другой тип. Подобным образом следующая программа STRU_IN.CPP использует метод read() для чтения из файла информации о служащем:

#include <iostream.h>

#include <fstream.h>

void main(void)

{

struct employee

{

char name [6 4] ;

int age;

float salary;

} worker = { "Джон Дой", 33, 25000.0 };

ifstream emp_file("EMPLOYEE.DAT");

emp_file.read((char *) &worker, sizeof(employee));

cout << worker.name << endl;

cout << worker.age << endl;

cout << worker.salary << endl;

}