Как инициализировать файл заголовка?

Задача: Создать программу на С++ которая бы разделяла файл на подфайлы согласно размеру, указанному в заголовке исходного файла. Заголовок содержит размеры записанных в файле блоков (ссс, ddd, eee). Проблема: Необходимо инициализировать "header" и считать в него данные из заголовка файла. Считывать данные необходимо в этом промежутке:

Header header;
 
if (file.is_open() && file1.is_open() && file2.is_open() && file3.is_open())
{
cout « "It's ok! File is open!\n\n" « endl;

 **"где-то тут"**
 
file.seekg(0,ios_base::end);
int size = file.tellg();
cout « "File size: " « size « endl;
int c = header.ccc/8;
int d = header.ddd/8;
int e = header.eee/8;

Не могу понять какую лучше функцию использовать, ибо во многих выдает ошибки.

Полная программа:

#include <iostream>
#include <fstream>
#include <cstring>
 
 
using namespace std;
struct Header
{
unsigned int aaa;
unsigned char bbb;
unsigned int ccc;
unsigned int ddd;
unsigned int eee;
 
};
 
 
int main()
{
char buffer1;
char buffer2;
char buffer3;
 
fstream file("example", ios::in | ios::binary);
fstream file1("exit1", ios::out | ios::binary);
fstream file2("exit2", ios::out | ios::binary);
fstream file3("exit3", ios::out | ios::binary);
 
Header header;
 
if (file.is_open() && file1.is_open() && file2.is_open() && file3.is_open())
{
cout « "It's ok! File is open!\n\n" « endl;
 
 
file.seekg(0,ios_base::end);
int size = file.tellg();
cout « "File size: " « size « endl;
int c = header.ccc/8;
int d = header.ddd/8;
int e = header.eee/8;
 
cout « "Size of ccc: " « c « endl;
cout « "Size of ddd: " « d « endl;
cout « "Size of eee: " « e « endl;
cout « "Header size: " « sizeof(Header) « endl;
 
 
int position = sizeof(Header);
file.seekg(sizeof(Header));
int b = position;
while (b <= position + cpu)
{
file.seekg(b);
file.read(&buffer1, 1);
file1.write(&buffer1, 1);
b++;
}
 
position += b;
cout « "ccc was rewrited" « endl;
 
while (b <= position + fpga)
{
file.seekg(b);
file.read(&buffer2, 1);
file2.write(&buffer2, 1);
b++;
}
 
position += b;
cout « "ddd was rewrited" « endl;
 
while (b <= position + flash)
{
file.seekg(b);
file.read(&buffer3, 1);
file3.write(&buffer3, 1);
b++;
}
 
cout « "eee was rewrited" « endl;
 
 
cout « "Done! " « endl;
file.close();
file1.close();
file2.close();
file3.close();
}
else
{
cout « "File didn't open!\n\n" « endl;
file.close();
file1.close();
file2.close();
file3.close();
return -1;
}
 
 
}

Ответы (0 шт):