Arbeiten mit Binärdateien mit fstream
In diesem Schritt werden Sie lernen, wie Sie mit der fstream
-Klasse in C++ mit Binärdateien arbeiten. Binärdateien speichern Daten im rohen Binärformat, was sich von Textdateien unterscheidet und nützlich für die effiziente Speicherung von strukturierten Daten ist.
Erstellen Sie eine neue C++-Datei namens binary_files.cpp
:
touch ~/project/binary_files.cpp
Fügen Sie den folgenden Code in die Datei binary_files.cpp
ein:
#include <iostream>
#include <fstream>
#include <string>
// Simple struct to demonstrate binary file writing
struct Student {
int id;
char name[50];
double gpa;
};
void writeBinaryFile() {
std::fstream binaryFile("students.bin", std::ios::out | std::ios::binary);
if (!binaryFile) {
std::cerr << "Error opening file for writing!" << std::endl;
return;
}
// Create some student records
Student students[3] = {
{1, "John Doe", 3.5},
{2, "Alice Smith", 3.8},
{3, "Bob Johnson", 3.2}
};
// Write entire struct to binary file
binaryFile.write(reinterpret_cast<char*>(students), sizeof(students));
binaryFile.close();
std::cout << "Binary file written successfully!" << std::endl;
}
void readBinaryFile() {
std::fstream binaryFile("students.bin", std::ios::in | std::ios::binary);
if (!binaryFile) {
std::cerr << "Error opening file for reading!" << std::endl;
return;
}
Student students[3];
// Read entire struct from binary file
binaryFile.read(reinterpret_cast<char*>(students), sizeof(students));
std::cout << "Student Records:" << std::endl;
for (int i = 0; i < 3; ++i) {
std::cout << "ID: " << students[i].id
<< ", Name: " << students[i].name
<< ", GPA: " << students[i].gpa << std::endl;
}
binaryFile.close();
}
int main() {
// Write binary file
writeBinaryFile();
// Read binary file
readBinaryFile();
return 0;
}
Kompilieren Sie das Programm:
g++ binary_files.cpp -o binary_files
Führen Sie das ausführbare Programm aus:
./binary_files
Beispielausgabe:
Binary file written successfully!
Student Records:
ID: 1, Name: John Doe, GPA: 3.5
ID: 2, Name: Alice Smith, GPA: 3.8
ID: 3, Name: Bob Johnson, GPA: 3.2
Wichtige Punkte zu Binärdateien:
- Verwenden Sie die
std::ios::binary
-Flagge für den Binärmodus.
write()
- und read()
-Methoden für Binärdaten.
reinterpret_cast
wird verwendet, um zwischen Typen zu konvertieren.
- Nützlich für die effiziente Speicherung von strukturierten Daten.
- Bewahrt die genaue Binärdarstellung der Daten auf.
Sie können sich Binärdateien wie ein präzises Bauplan vorstellen. Sie speichern Daten genau so, wie sie im Speicher vorliegen, ohne jegliche Textkonvertierung.