Работа с бинарными файлами с использованием fstream
На этом этапе вы научитесь работать с бинарными файлами с использованием класса fstream
на языке C++. Бинарные файлы хранят данные в их исходном двоичном формате, что отличается от текстовых файлов и полезно для эффективного хранения структурированных данных.
Создайте новый файл на языке C++ с именем binary_files.cpp
:
touch ~/project/binary_files.cpp
Добавьте следующий код в файл binary_files.cpp
:
#include <iostream>
#include <fstream>
#include <string>
// Простая структура для демонстрации записи в бинарный файл
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 << "Ошибка при открытии файла для записи!" << std::endl;
return;
}
// Создание нескольких записей о студентах
Student students[3] = {
{1, "John Doe", 3.5},
{2, "Alice Smith", 3.8},
{3, "Bob Johnson", 3.2}
};
// Запись всей структуры в бинарный файл
binaryFile.write(reinterpret_cast<char*>(students), sizeof(students));
binaryFile.close();
std::cout << "Бинарный файл успешно записан!" << std::endl;
}
void readBinaryFile() {
std::fstream binaryFile("students.bin", std::ios::in | std::ios::binary);
if (!binaryFile) {
std::cerr << "Ошибка при открытии файла для чтения!" << std::endl;
return;
}
Student students[3];
// Чтение всей структуры из бинарного файла
binaryFile.read(reinterpret_cast<char*>(students), sizeof(students));
std::cout << "Записи о студентах:" << std::endl;
for (int i = 0; i < 3; ++i) {
std::cout << "ID: " << students[i].id
<< ", Имя: " << students[i].name
<< ", GPA: " << students[i].gpa << std::endl;
}
binaryFile.close();
}
int main() {
// Запись в бинарный файл
writeBinaryFile();
// Чтение из бинарного файла
readBinaryFile();
return 0;
}
Скомпилируйте программу:
g++ binary_files.cpp -o binary_files
Запустите исполняемый файл:
./binary_files
Пример вывода:
Бинарный файл успешно записан!
Записи о студентах:
ID: 1, Имя: John Doe, GPA: 3.5
ID: 2, Имя: Alice Smith, GPA: 3.8
ID: 3, Имя: Bob Johnson, GPA: 3.2
Основные моменты о бинарных файлах:
- Используйте флаг
std::ios::binary
для бинарного режима
- Методы
write()
и read()
для работы с бинарными данными
reinterpret_cast
используется для преобразования типов
- Полезны для эффективного хранения структурированных данных
- Сохраняют точное двоичное представление данных
Вы можете представить бинарные файлы как точный чертеж. Они хранят данные именно так, как они существуют в памяти, без какого-либо текстового преобразования.