Читайте также:
|
|
Запись в файл
fwrite( адрес записываемой величины, размер одного экземпляра, количество записываемых величин, имя логического файла );Функция fwrite() возвращает число реально записанных элементов, которое при успешном выполнении функции будет равно числу затребованных элементов. Если же элементов записано меньше, чем указано при вызове, произошла ошибка.
Например,
fwrite(&dat, sizeof(int), 1, f);
Чтение из файла
fread( адрес величины, размер одного экземпляра, количество считываемых величин, имя логического файла );Функция fread() возвращает число реально прочитанных элементов. Если оказалось, что прочитано меньше элементов, чем требовалось при вызове, значит, либо произошла ошибка при выполнении операции, либо был достигнут конец файла. Определить, что именно произошло, можно с помощью функции feof() или ferror().
Например,
fread(&dat, sizeof(int), 1, f);Закрытие файла
Перед завершением программы открытый файл следует закрыть во избежание в нем потери данных. Это достигается функцией fclose(), которая принимает указатель на файл и возвращает значение 0 при успешном закрытии файла, иначе значение EOF.
fclose( имя логического файла );Пример 1. Заполнить файл некоторым количеством целых случайных чисел.
#include <iostream>
#include <time.h>
#include <cstdlib>
#include <cstdio>
using namespace std;
int main()
{
FILE *f; int dat;
srand(time(0));
int n=rand()%30 + 1;
cout << "File name? ";
char s[20];
cin.getline(s, 20);
f=fopen(s, "wb");
for (int i=1; i<=n; i++)
{ dat = rand()%101 - 50;
cout << dat << " ";
fwrite(&dat, sizeof(int), 1, f);
}
cout << endl;
fclose(f);
return 0;
}
Пример 2. Найти сумму и количество целых чисел, записанных в бинарный файл.
#include <iostream>#include <cstdio> using namespace std; int main(){FILE *f;
int dat, n=0, sum=0;
cout << "File name? ";
char s[20];
cin.getline(s, 20);
f=fopen(s, "rb");
while (fread(&dat, sizeof(int), 1, f))
{n++;
cout << dat << " ";
sum+=dat;
}
cout << endl;
cout << "sum: " << sum << "; number: " << n << endl;
fclose(f);
system("PAUSE");
return 0;}Если файл был открыт для двоичных данных, то fread() и fwrite() могут читать и писать любой тип информации.
Пример 3. Поместить в файл n записей, содержащих сведения о кроликах, содержащихся в хозяйстве: пол (m/f), возраст (в мес.), масса.
#include <iostream>
#include <cstdio>
using namespace std;
struct krolik
{
char pol;
int vozrast;
double massa;
};
int main()
{
FILE *f; krolik dat; int n;
cout << "File name? ";
char s[20];
cin.getline(s, 20);
f=fopen(s, "wb");
cout << "How many rabbits? "; cin >> n;
for (int i=1; i<=n; i++)
{ cout << "What sex " << i << "th rabbit? "; cin >> dat.pol;
cout << "How old " << i << "th rabbit? "; cin >> dat.vozrast;
cout << "What is the mass of the " << i << "th rabbit? ";
cin >> dat.massa;
fwrite(&dat, sizeof(krolik), 1, f);
}
fclose(f);
return 0;
}
Пример 3 (продолжение). В бинарном файле хранятся сведения о кроликах, содержащихся в хозяйстве: пол (m/f), возраст (в мес.), масса. Найти наиболее старого кролика. Если таких несколько, то вывести информацию о том из них, масса которого больше.
Дата добавления: 2014-12-19; просмотров: 109 | Поможем написать вашу работу | Нарушение авторских прав |