Я пытаюсь преобразовать функцию ifstream (текст) в функцию ifstream (бинарный), но ясно, что я потерян.Предполагается, что все данные хранятся в массиве, который называется Kunde Kunde kunder[MAXKUND]
;
ПРИМЕЧАНИЕ. Это часть школьного задания, которое поможет нам узнать о двоичных файлах.Поэтому я не требую полных решений, но с радостью буду благодарны за указатели на то, что я делаю неправильно.
Текстовый файл сначала переваривается с помощью:
// from source file
void readFromTextFile() {
char navn[NVNLEN];
int antArr, arrNr, antBill;
int nr = 0, j;
ifstream innfil("kun_olxx.dta");
if (innfil) {
innfil.get(navn, NVNLEN-1);
while (!innfil.eof()) {
++nr;
kunder[nr].oppdaterNavn(navn);
innfil >> antArr;
for (j = 1; j <= antArr; j++) {
innfil >> arrNr >> antBill;
kunder[nr].oppdaterBestiltFaatt(arrNr, Bestilt, antBill);
arrangementer[arrNr].oppdaterAntallOnskedeBilletter(antBill);
}
innfil.ignore();
innfil.get(navn, NVNLEN-1);
}
antKunder = nr;
} else
cout << "\nFinner ikke filen 'KUN_OLxx.DTA'!\n";
}
Затем текст изменяется и записывается в двоичный файл с помощью следующей функции:
void skrivKunderTilFil() {
int i;
ofstream utfil("kun_olxx.res", ios::binary);
for (i = 1; i <= antKunder; i++) {
utfil.write((char *)& kunder[i], sizeof(Kunde));
kunder[i].skriv();
}
На рисунке показаны 3 примера того, что kunder[i].skriv()
выводит
, как только файл был выведен в двоичный формат, он должен быть вставлен в ту же программуно вместо чтения через предыдущий readFromTextFile()
теперь он должен использовать readFromBinaryFile()
. На этом этапе я просто пытаюсь вставить данные без обновления массива «kunder», однако получаю только памятьрасположение данных, а не «фактических» данных
Текущая функция readFromBinaryFile ():
// capture binary
void readFromBinaryFile() {
char navn[NVNLEN];
int antArr[10], arrNr[10], antBill[10];
int nr = 0, j;
ifstream innfill;
innfill.open("kun_olxx.res", ios::in | ios::binary);
innfill.seekg(0, ios::end);
size = (int)innfill.tellg();
innfill.seekg(0, ios::beg);
while (innfill.tellg() < size) {
++nr;
innfill.read((char*)navn, sizeof(navn));
innfill.read((char*)antArr, sizeof(antArr));
innfill.read((char*)arrNr, sizeof(arrNr));
innfill.read((char*)antBill, sizeof(antBill));
cout << "\n\n" << nr << "\t" << navn << "\t" <<
antArr << "\t" << arrNr << "\t" << antBill; // trying to visulize
}