Напишите двоичный файл на C++

Napisite Dvoicnyj Fajl Na C



В программировании на C++ работа с двоичными файлами имеет основополагающее значение для хранения и управления необработанными данными. Независимо от того, работаете ли вы с изображениями, аудиофайлами или пользовательскими структурами данных, умение эффективно записывать двоичные файлы имеет решающее значение. Двоичные файлы хранят данные в формате, который не читается человеком, что делает их пригодными для различных приложений, таких как хранение сложных структур, изображений или любых данных, которые не соответствуют простому текстовому представлению.

C++ предоставляет библиотеку для взаимодействия с двоичными файлами, в частности с классом «ofstream», для записи двоичных данных. Эта возможность позволяет разработчикам беспрепятственно создавать, изменять двоичные файлы и управлять ими. В этой статье рассматриваются различные методы и приемы написания двоичных файлов на C++, проливаются свет на их применение и варианты использования.

Напишите двоичный файл с помощью C++

Чтобы сохранить данные в двоичный файл с использованием C++, используется метод write(). Эта функция записывает указанное количество байтов в назначенный поток, начиная с местоположения указателя «put». Если указатель «put» находится в конце, файл расширяется. Однако новые данные перезаписывают существующие символы, если указатель находится внутри файла. В случае ошибки в процессе записи поток помечается как находящийся в состоянии ошибки. Теперь давайте перейдем к примерам, чтобы научиться писать в двоичный файл, используя некоторые простые встроенные функции C++.







Способ 1: запись двоичных файлов со структурированными данными

Во многих случаях вам может потребоваться записать структурированные данные, например пользовательские структуры, в двоичный файл. Давайте рассмотрим пример, который содержит запись о человеке, включающую имя, рост и возраст человека. Посмотрите следующий код и посмотрите объяснение:



#include

#include

структура Человек {

голец имя [ пятьдесят ] ;

интервал возраст ;

двойной высота ;

} ;

интервал основной ( ) {

стандартный :: внепотоковый outFile ( 'люди.bin' , стандартный :: iOS :: двоичный ) ;

если ( ! outFile. открыт ( ) ) {

стандартный :: Серр << «Ошибка! Невозможно открыть файл для записи!» << стандартный :: конец ;

возвращаться 1 ;

}

Человек человек1 '=' { 'Калсум Ильяс' , 25 , 1,75 } ;

Человек человек2 '=' { 'Калсум Баджва' , 30 , 1,68 } ;

outFile. писать ( reinterpret_cast < голец *> ( & человек 1 ) , размер ( человек 1 ) ) ;

outFile. писать ( reinterpret_cast < голец *> ( & человек2 ) , размер ( человек2 ) ) ;

outFile. закрывать ( ) ;

стандартный :: расчет << «Запись об этом человеке успешно записана в двоичный файл». << стандартный :: конец ;

возвращаться 0 ;

}

Вот разбивка кода с конкретными деталями. Программа начинается с определения пользовательской структуры под названием «Человек». Он имеет три поля: имя, возраст и рост. Подробная информация об этих полях следующая:



  • имя: Строка для хранения имени человека (до 50 символов).
  • возраст: Целое число для хранения возраста человека
  • высота: Двойник для хранения роста человека

После определения структуры «Человек» запускается основная функция, которая является точкой входа в программу. Первая строка основной программы открывает файл с именем «people.bin». Мы используем «std::ofstream» для создания файла с именем «people.bin» для записи данных в двоичном формате. Проверка успешности открытия файла очень важна. В противном случае отображается сообщение об ошибке и программа останавливается. Следовательно, с помощью условия if и функции is_open() мы проверяем, успешно ли открылся файл или нет.





Здесь создаются два объекта «Человек». Мы определяем две переменные «person1» и «person2» типа «Person». Мы присваиваем переменным значения имени, возраста и роста для «Калсум Ильяс» и «Калсум Баджва».

Теперь, когда у нас есть данные для записи в двоичный файл, давайте выполним реальную функцию с помощью функции write(). Мы используем outFile.write для записи содержимого каждого объекта Person в файл. «reinterpret_cast(&person1)» и «reinterpret_cast(&person2)» преобразуют всю структуру «Person» (включая все ее поля) в непрерывный поток байтов, который подходит для записи в двоичный файл. . Мы пишем размер каждого объекта «Человек», используя «sizeof(person1)» и «sizeof(person2)», чтобы гарантировать правильность записи всех данных.



После записи данных в файл очень важно правильно его закрыть, чтобы никакие данные не были потеряны из-за какой-либо другой функции. Мы используем outFile.close() для освобождения ресурсов, связанных с файлом, и обеспечения точности записи данных. Наконец, мы печатаем сообщение, подтверждающее успешную запись данных в двоичный файл.

Если объяснить этот пример проще, то представьте себе специальную записную книжку, в которой можно хранить информацию о людях только на секретном языке. Этот код создает схему для организации информации (имя, возраст, рост). Он открывает блокнот, заполняет профили двух человек, переводит информацию на секретный язык и аккуратно записывает ее внутрь. Затем он надежно закрывает ноутбук, сохраняя профили для использования в будущем. Обратитесь к выводу программы, представленному на следующем снимке:

Способ 2: запись целых чисел в двоичный файл

В этом методе массив целых чисел записывается в двоичный файл с именем «integers.bin». «reinterpret_cast» рассматривает целочисленный массив как последовательность символов (байтов) для записи в файл. Это особенно важно, поскольку двоичные файлы имеют дело с необработанными байтовыми данными. Давайте посмотрим на следующий простой пример:

#include

#include

интервал основной ( ) {

стандартный :: внепотоковый outFile ( 'целые числа.bin' , стандартный :: iOS :: двоичный ) ;

если ( ! outFile. открыт ( ) ) {

стандартный :: Серр << «Ошибка! Невозможно открыть файл для записи!» << стандартный :: конец ;

возвращаться 1 ;

}

интервал цифры [ ] '=' { 42 , 99 , - 1 , 0 } ;

outFile. писать ( reinterpret_cast < голец *> ( цифры ) , размер ( цифры ) ) ;

outFile. закрывать ( ) ;

стандартный :: расчет << «Данные целые числа успешно записаны в двоичный файл». << стандартный :: конец ;

возвращаться 0 ;

}

Вот разбивка кода с конкретными деталями:

«#include » и «#include » предоставляют необходимые инструменты для работы с файлами и печати сообщений, таких как cin и write() соответственно. «std::ofstream outFile(»integers.bin», std::ios::binary);» открывает двоичный файл с именем «integers.bin», в котором числа могут храниться только в секретном коде (двоичный формат). Он проверяет, открыт ли файл. В противном случае выдается сообщение об ошибке.

Следующая строка: «int Numbers[] = {42, 99, -1, 0};» определяет массив с именем «numbers» с целыми числами 42, 99, -1 и 0. «outFile.write(reinterpret_cast(numbers), sizeof(numbers));» аккуратно переводит целые числа в двоичный формат и записывает их в файл «integer.bin». «outFile.close();» правильно закрывает файл, чтобы сохранить целые числа в безопасности и организованности. Наконец, выводится сообщение, подтверждающее, что целые числа успешно сохранены в двоичном файле. Чтобы увидеть результат, обратитесь к следующему выводу этой программы:

Заключение

Написание двоичных файлов на C++ — важнейший навык для эффективной обработки различных типов данных. В этом исследовании написания двоичных файлов на C++ мы узнали, как можно использовать класс ofstream для эффективной обработки двоичных данных. Независимо от того, имеете ли вы дело с простыми целыми числами или структурированными данными с использованием пользовательских структур, процесс включает в себя открытие потока файлов, запись данных в двоичном формате и затем закрытие файла. Эта возможность предоставляет разработчикам C++ гибкость при работе с разнообразными типами двоичных данных, способствуя универсальности языка в приложениях, от программирования на уровне системы до обработки мультимедиа.