МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Сила воли ведет к действию, а позитивные действия формируют позитивное отношение


Как определить диапазон голоса - ваш вокал


Игровые автоматы с быстрым выводом


Как цель узнает о ваших желаниях прежде, чем вы начнете действовать. Как компании прогнозируют привычки и манипулируют ими


Целительная привычка


Как самому избавиться от обидчивости


Противоречивые взгляды на качества, присущие мужчинам


Тренинг уверенности в себе


Вкуснейший "Салат из свеклы с чесноком"


Натюрморт и его изобразительные возможности


Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д.


Как научиться брать на себя ответственность


Зачем нужны границы в отношениях с детьми?


Световозвращающие элементы на детской одежде


Как победить свой возраст? Восемь уникальных способов, которые помогут достичь долголетия


Как слышать голос Бога


Классификация ожирения по ИМТ (ВОЗ)


Глава 3. Завет мужчины с женщиной


Оси и плоскости тела человека


Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


Отёска стен и прирубка косяков Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.


Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) - В простых моделях рынка спрос и предложение обычно полагают зависящими только от текущей цены на товар.

Пример 17.10. Использование функций fwrite() и fread().-Работает





#include <stdio.h>

#include <iostream.h>

#include <conio.h>

 

int main()

{

FILE *stream;

char list[30];

int i, numread, numwritten;

if( (stream = fopen( "prim17-10.out", "wb" )) != NULL )

{

for ( i = 0; i < 25; i++ )

list[i] = (char)('z' - i);

numwritten = fwrite( list, sizeof( char ), 25, stream );

printf( "Wrote %d items\n", numwritten );

fclose( stream );

}

else printf( "Problem opening the file\n" );

if( (stream = fopen( "prim17-10.out", "rb" )) != NULL )

{

numread = fread( list, sizeof( char ), 25, stream );

printf( "Number of items read = %d\n", numread );

printf( "Contents of buffer = %.25s\n", list );

fclose( stream );

}

else printf( "File could not be opened\n" );

 

cout << "\nНажмите любую клавишу..." ;

getch();

return 0;

}

 

 

В данном примере массив list выступает в качестве буфера для вывода и ввода информации из бинарного файла. Сначала элементы буфера инициализируются буквами латинского алфавита от z до b, а затем записываются в файл с помощью функции fwrite( list, sizeof( char ), 25, stream ). Здесь оператор sizeof( char ) указывает размер элемента (буквы), а число 25 соответствует числу записываемых букв. Аналогичным образом осуществляется считывание информации из файла fread( list, sizeof( char ), 25, stream ), где в массив list помещаются 25 символов, хранящихся в файле.

Функции fwrite() и fread() удобно использовать при сохранении данных структуры в файл. Запишем пример хранения информации по двум книгам в бинарном файле.

Пример 17.11. Сохранение структур в бинарном файле.-Работает

#include <stdio.h>

#include <iostream.h>

#include <conio.h>

#define N 2

struct tag_book

{

char name[100];

char author[100];

int year;

} books[N];

 

int main(void)

{

for(int i=0;i < N;i++)

{

scanf("%s",books[i].name);

scanf("%s",books[i].author);

scanf("%d",&books[i].year);

}

FILE* fp = fopen("prim17-11.txt","wb");

fwrite(books, sizeof(books),1,fp);

fclose(fp);

 

fp = fopen("prim17-11.txt","rb");

fread(books,sizeof(books),1,fp);

fclose(fp);

printf("------------------------------------------------\n");

for(int i=0;i < N;i++)

{

puts(books[i].name);

puts(books[i].author);

printf("%d\n",books[i].year);

}

 

cout << "\nНажмите любую клавишу..." ;

getch();

return 0;

}

 

 

В данном примере с помощью функции fwrite() целиком сохраняется массив books, состоящий из двух элементов, а оператор sizeof(books) определяет размер массива books. Аналогичным образом реализуется и функция fread(), которая считывает из файла сразу весь массив. По существу функции fwrite() и fread(), в данном примере, осуществляют копирование заданной области памяти в файл, а затем обратно. Это их свойство удобно использовать при хранении «сложных» форм данных, когда простая поэлементная запись данных в файл становится трудоемкой или невозможной.

Следует отметить, что функция fopen() при открытии файла на запись уничтожает все данные из этого файла, если они были. Вместе с тем существует необходимость добавлять данные в файл, не уничтожая ранее записанную информацию. Это достигается путем открытия файла на добавление информации. В этом случае функции fopen() третьим аргументом передается строка "a" или "ab", что означает открыть файл на добавление информации в его конец. Продемонстрируем работу данного режима на следующем примере.





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.