ifstream二进制,捕获数据。从ifstream文本-> ifstream二进制

时间:2019-02-04 21:59:52

标签: c++ binaryfiles ifstream

我正在尝试将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();
    }

Visualization of 3 "kund" fields

该图显示了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
    }

0 个答案:

没有答案