Работа с бинарными файлами C++
Для работы с бинарными файлами в C/C++ научимся пользоваться следующими функциями и опишем некоторые переменные.
int* a;// Указатель на переменную или структуру или адрес переменной или структуры, которую мы собираемся записывать в бинарный файл.
int b;//Количество байт занимаемое переменной или структурой, которую мы хотим записать.
int c;// Количество элементов, размера b.
FILE* d;//Указатель на бинарный файл или адрес бинарного файла.
fwrite(a, b, c, d);//функция для последовательной записи переменной или структуры в бинарный файл.
Примеры для базовых типов:
1)
int i=10;
int* a=&i;
int b=sizeof(i);
int c=1;//т.к у нас не массив и не что-то подобное, то мы записываем 1 раз.
FILE* d=fopen("test", "wb+");
2)
double i=10;
double* a=&i;
int b=sizeof(i);
int c=1;
FILE* d=fopen("test", "wb+");
fwrite(a, b, c, d);
Примеры со структурами и массивами структур:
1)
struct pt {
int x,y;
};
pt i;
i.x=0;
i.y=0;
pt* a=&i;
int b=sizeof(i);
int c=1;
FILE* d=fopen("test", "wb+");
fwrite(a, b, c, d);
2)
int* i=new int[10];
forn(j,10)
i[j]=j;
int b=sizeof(int);
int c=10;
FILE* d=fopen("test.dat", "wb+");
fwrite(i, b, c, d);
3)
pt i[10];
forn(j,10){
i[j].x=j;
i[j].y=j;
}
int b=sizeof(pt);
int c=10;
FILE* d=fopen("test.dat", "wb+");
fwrite(&i, b, c, d);
Для последовательного чтения из файла мы будем использовать функцию fread(a,b,c,d). У этой функции абсолютно такие же параметры. Если вы собираетесь писать и читать в файл в одном коде-программе, то не забудьте использовать функцию rewind(d); Пример для использования последовательной записи и чтения:
struct pt {
int x,y;
};
pt i[10];
forn(j,10){
i[j].x=j;
i[j].y=j;
}
int b=sizeof(pt);
int c=10;
FILE* d=fopen("test.dat", "wb+");
fwrite(&i, b, c, d);
rewind(d);
fread(&i, b, c, d);
forn(j,10){
cout<
int e;// количество байт на которое мы хотим переместиться
От начала файла SEEK_SET
От текущей позиции SEEK_CUR
От конца файла SEEK_END
fseek(d, e, SEEK_SET);//функция перемещения указателя на заданное количество байт.
Пример перемещения указателя в бинарном файле на последнюю в нашем массиве структуру.
fseek(d, (c-1)*b, SEEK_SET);
Чтобы узнать на сколько байт мы уже сместились относительно начала файла воспользуемся функцией ftell(d);
На этом мы заканчиваем работу с бинарными файлами, потому что мы научились организовывать к ним прямой и последовательный доступ и в полной мере освоили механизмы циркуляции информации в них.
Java
-
r04
-
lordrp
-
-
Вадим
-
lordrp
-