Если файл открыт в бинарном режиме, его можно записывать или считывать побайтно. Функция fseek() позволяет обращаться с бинарным файлом как с массивом и переходить к любой позиции в файле, обеспечивая возможность произвольного доступа. Если текстовые файлы являются файлами с последовательным доступом, то к бинарным файлам может применяться произвольный доступ.
Составим программу создания нового файла с информацией о городах: код, название, численность жителей.
#include "stdafx.h"
#include <conio.h>
typedef struct city
{ int kod;
char name[10];
long c; } town;
town t;
int main()
{ char c;
FILE *f;
char ch;
f=fopen("file1.dat","wb"); //открытие бинарного файла для записи
printf("\n Ввод информации о городе ");
do
{ printf("\nКод: "); scanf("%d", &t.kod);
printf("\nназвание: "); scanf("%s", t.name);
printf("\nколичество жителей: "); scanf("%ld", &t.c);
fwrite(&t, sizeof(t), 1, f); //запись в файл одной структуры t
printf("\n END Закончить? y/n ");
ch=getch();
}
while (ch!= 'y');
fclose(f);
}
Выполнение этой программы приведет к созданию бинарного файла с информацией о городах.
|
|
Рассмотрим еще одну программу, которая будет читать из файла информацию о городах и выводить на экран список городов, количество жителей в которых превышает миллион.
#include "stdafx.h"
#include <conio.h>
typedef struct city
{ int kod;
char name[10];
long c; } town;
town t;
int main()
{
FILE *f;
f=fopen("file1.dat","rb"); //открытие бинарного файла для чтения
fread(&t, sizeof(t), 1, f); //чтение из файла одной структуры t
while (!feof(f))
{ if(t.c>1000000)
printf("\n%3d название: %10s количество жителей: %ld",
t.kod, t.name, t.c);
fread(&t, sizeof(t), 1, f);
}
fclose(f);
}