Lesen und Schreiben von Bits in eine Datei in C++

Syed Hassan Sabeeh Kazmi 12 Oktober 2023
Lesen und Schreiben von Bits in eine Datei in C++

In C++ erfordern Prozesse wie die Komprimierung einer Textdatei das Lesen und Schreiben der Bits in eine Datei. In diesem Tutorial erfahren Sie, wie Sie Bits in C++ fehlerfrei in eine Datei lesen oder schreiben.

Der istream und ostream spielen als Destruktor eine entscheidende Rolle, wenn Bits in eine Datei gelesen und geschrieben werden müssen.

Es kann jedoch erforderlich sein, Bits in eine binäre Ausgabedatei zu schreiben, während der Huffman-Baum in der Huffman-Codierung codiert wird, und anstatt die Streams zu verwenden, können Sie die Booleschen Werte in Blöcke von 8 Bit packen und dann die Bytes schreiben.

Verwenden Sie iStream und oStream zum Lesen und Schreiben von Bits in eine Datei in C++

Die Klasse BitInputStream enthält die Funktionen iStream und oStream zum Lesen und Schreiben von Bits. Da ifstream und ofstream Binärdateien öffnen können, indem sie Streams an einen physischen Dateinamen anhängen, sind sie auch entscheidend, um Bits in eine Datei zu lesen oder zu schreiben.

Darüber hinaus können offene Mitgliedsfunktionen einer Zielklasse BitInputStream Argumente (optionale Argumente) bereitstellen, die nicht gemeinsam beschrieben werden.

Der ostream ist eine der offenen Member-Funktionen, die bewirkt, dass n Bytes aus der Speicherstelle geschrieben werden und den Zeiger vor den n Bytes überträgt.

Die Stream-Klasse fstream ist hochfunktionaler als jede andere Stream-Klasse, da sie Dateien sowohl lesen als auch schreiben kann.

Es ist nicht wichtig, dass Dateistreams Operationen im Binärmodus lesen und schreiben, nur weil sie im Binärmodus geöffnet werden. stattdessen können sie Lese-/Schreiboperationen jeglicher Art von Gegenleistung durchführen.

#include <fstream>
#include <iostream>  // reflects `istream` and `ostream`

// optional
using namespace std;

// struct declaration
struct army_per {
  // an entity that reflects three attributes
  int ref_no;
  string rank, name;
};

// primary class
int main() {
  // declaration of `ofstream` for read/write `army_per` file
  ofstream wf("army_per.dat", ios::out | ios::binary);

  if (!wf) {
    cout << "Unable to open the file!" << endl;
    return 1;
  }

  // entity declaration
  army_per soldier[2];

  // first entry
  soldier[0].ref_no = 1;
  soldier[0].name = "Rob";
  soldier[0].rank = "Captain";

  // second entry
  soldier[1].ref_no = 2;
  soldier[1].name = "Stannis";
  soldier[1].rank = "Major";

  for (int i = 0; i < 2; i++) wf.write((char *)&soldier[i], sizeof(army_per));

  wf.close();

  if (!wf.good()) {
    cout << "Error: bits writing time error!" << endl;
    return 1;
  }

  ifstream rf("army_per.dat", ios::out | ios::binary);

  if (!rf) {
    cout << "File is not found!" << endl;
    return 1;
  }

  army_per rstu[2];
  for (int i = 0; i < 2; i++) rf.read((char *)&rstu[i], sizeof(army_per));

  rf.close();

  if (!rf.good()) {
    cout << "Error: bits reading time error occured!" << endl;
    return 1;
  }

  cout << "Army Div-32 details:" << endl;

  for (int i = 0; i < 2; i++) {
    // access the elements of the object and output the result of each
    // individual
    cout << "Reference No: " << soldier[i].ref_no << endl;
    cout << "Name: " << soldier[i].name << endl;
    cout << "Rank: " << soldier[i].rank << endl;
    cout << endl;
  }
  return 0;
}

Ausgang:

Army Div-32 details:
Reference No: 1
Name: Rob
Rank: Captain

Reference No: 2
Name: Stannis
Rank: Major

Allgemein wird angenommen, dass cin und cout in C++ zu ostream gehören, aber das cin-Objekt (als globales Objekt) gehört zur istream-Klasse.

Darüber hinaus enthält der Dateistream; ifstream und ofstream werden jeweils von istream und ostream geerbt.

Programmierer sollten sich darüber im Klaren sein, dass der Puffer immer größer ist als die Daten, die er aufnehmen soll. In C++ kann die Wahrscheinlichkeit, dass die Zuverlässigkeit Ihres Programms verringert wird, im Falle von ungeprüften oder behobenen Fehlern steigen, und stellen Sie sicher, dass keine Dateioperationen dazu führen, dass das Programm angehalten wird.

Syed Hassan Sabeeh Kazmi avatar Syed Hassan Sabeeh Kazmi avatar

Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.

GitHub

Verwandter Artikel - C++ File