Бинарные (двоичные) файлы обычно используются для организации баз данных, состоящих, как правило, из объектов структурного типа. При чтении-записи бинарных файлов удобнее всего пользоваться функциями, выполняемыми блоковый ввод-вывод fread() и fwrite().
Рассмотрим наиболее распространенные функции с помощью которых можно организовать работу с файлами:
int fileno(FILE *f) | – возвращает значение дескриптора файла f - fd (число, определяющее номер файла); |
long filelength(int fd) | – возвращает длину файла, имеющего номер (дескриптор) fd в байтах; |
int chsize(int fd, long pos) | – выполняет изменение размера файла, имеющего номер fd, признак конца файла устанавливается после байта с номером pos; |
intfseek(FILE *f, long size, int kod) | – выполняет смещение указателя файла f на size байт в направлении признака kod: 0 - от начала файла; 1 - от текущей позиции указателя; 2 - от конца файла; |
long ftell(FILE *f) | – возвращает значение указателя на текущую позицию файла (-1 – ошибка); |
intfeof(FILE *f) | – возвращает ненулевое значение при правильной записи признака конца файла; |
intfgetpos(FILE *f, long *pos) | – определяет значение текущей позиции pos файла f, возвращает 0 при успешном завершении. |
Пример программы работы с файлом структур:
. . .
struct Sved {
char Fam[30];
float S_Bal;
} zap,zapt;
char Spis[]="c:\\bc31\\work\\Sp.dat";
FILE *F_zap;
FILE* Open_file(char *, char *);
void main (void) {
int i, j, kodR, size = sizeof(Sved);
while(1) {
puts("Создание - 1\nПросмотр - 2\nДобавление - 3\nВыход - 0");
switch(kodR = getch())
{
case ‘1’: case ‘3’:
if(kodR==1) F_zap = Open_file (Spis,"w+");
else F_zap = Open_file (Spis,"a+");
while(2) {
cout << "\n Fam "; cin >> zap.Fam;
if((zap.Fam[0])=='0') break;
cout << "\n Средний балл: ";
cin >> zap.S_Bal;
fwrite(&zap,1,size,F_zap);
}
fclose(F_zap);
break;
case ‘2’: F_zap = Open_file (Spis,"r+"); int nom=1;
while(2) {
if(!fread(&zap,size, 1, F_zap)) break;
printf(" %2d: %20s %5.2f\n", nom++, zap.Fam, zap.S_Bal);
}
fclose(F_zap);
break;
case ‘0’: return; // exit(0);
} // Конец While(1)
} // Конец Switc
} // Конец программы
FILE* Open_file(char *file, char *kod)
{
FILE *f;
if(!(f = fopen(file, kod)))
{
puts(“Файл не создан!”);
getch();
exit(1);
}
else return f;
}