我正在尝试将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();
}
该图显示了kunder[i].skriv()
输出的3个示例
一旦文件已输出为二进制格式,则应将其插入同一程序,但现在不再使用前一个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
}