Trabajar con archivos binarios utilizando fstream
En este paso, aprenderás cómo trabajar con archivos binarios utilizando la clase fstream
en C++. Los archivos binarios almacenan datos en su formato binario sin procesar, lo cual es diferente a los archivos de texto y es útil para almacenar datos estructurados de manera eficiente.
Crea un nuevo archivo C++ llamado binary_files.cpp
:
touch ~/project/binary_files.cpp
Agrega el siguiente código al archivo binary_files.cpp
:
#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;
}
Compila el programa:
g++ binary_files.cpp -o binary_files
Ejecuta el archivo ejecutable:
./binary_files
Ejemplo de salida:
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
Puntos clave sobre los archivos binarios:
- Utiliza la bandera
std::ios::binary
para el modo binario
- Métodos
write()
y read()
para datos binarios
reinterpret_cast
se utiliza para convertir entre tipos
- Útil para almacenar datos estructurados de manera eficiente
- Preserva la representación binaria exacta de los datos
Puedes pensar en los archivos binarios como un plano técnico preciso. Almacenan los datos exactamente como existen en la memoria, sin ninguna conversión de texto.