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.
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