двоичный файл ifstream, захват данных.Переписать из текста ifstream -> двоичный файл ifstream - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь преобразовать функцию 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

На рисунке показаны 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
    }
...