Напишите бинарну датотеку у Ц++

Napisite Binarnu Datoteku U C



У Ц++ програмирању, рад са бинарним датотекама је фундаменталан за складиштење и манипулацију сировим подацима. Без обзира да ли радите са сликама, аудио датотекама или прилагођеним структурама података, способност ефикасног писања бинарних датотека је кључна. Бинарне датотеке чувају податке у формату који није читљив за људе, што их чини погодним за различите апликације као што је складиштење сложених структура, слика или било којих података који не прате једноставну текстуалну репрезентацију.

Ц++ обезбеђује библиотеку <фстреам> за интеракцију са бинарним датотекама, посебно класом „офстреам“, за писање бинарних података. Ова могућност омогућава програмерима да неприметно креирају, мењају и управљају бинарним датотекама. Овај чланак истражује различите методе и технике за писање бинарних датотека у Ц++, бацајући светло на њихове примене и случајеве употребе.

Напишите бинарну датотеку користећи Ц++

Да бисте сачували податке у бинарну датотеку користећи Ц++, користи се метода врите(). Ова функција уписује одређени број бајтова у назначени ток, почевши од локације „пут” показивача. Ако је показивач „пут“ на крају, датотека се проширује. Међутим, нови подаци замењују постојеће знакове ако је показивач унутар датотеке. У случају грешке током процеса писања, ток је означен као у стању грешке. Сада, пређимо на примере да научимо како писати у бинарну датотеку користећи неке једноставне и уграђене Ц++ функције.







Метод 1: Писање бинарних датотека са структурираним подацима

Можда ћете морати да упишете структуриране податке, као што су прилагођене структуре, у бинарну датотеку у многим случајевима. Хајде да размотримо пример који садржи запис о особи који укључује име, висину и старост особе. Погледајте следећи код и погледајте објашњење:



#инцлуде <иостреам>

#инцлуде <фстреам>

струцт Особа {

цхар име [ педесет ] ;

инт старости ;

дупло висина ;

} ;

инт главни ( ) {

стд :: офстреам оутФиле ( 'људи.бин' , стд :: иос :: бинарни ) ;

ако ( ! оутФиле. је отворен ( ) ) {

стд :: церр << 'Грешка! Не могу да отворим датотеку за писање!' << стд :: ендл ;

повратак 1 ;

}

Особа особа 1 = { 'Калсом Иљас' , 25 , 1.75 } ;

Особа особа 2 = { 'Калсом Бајва' , 30 , 1.68 } ;

оутФиле. писати ( реинтерпрет_цаст < цхар *> ( & особа 1 ) , величина ( особа 1 ) ) ;

оутФиле. писати ( реинтерпрет_цаст < цхар *> ( & особа2 ) , величина ( особа2 ) ) ;

оутФиле. Близу ( ) ;

стд :: цоут << „Запис особе је успешно уписан у бинарну датотеку.“ << стд :: ендл ;

повратак 0 ;

}

Ево поделе кода са специфичним детаљима. Програм почиње дефинисањем прилагођене структуре под називом „Особа“. Има три поља: име, старост и висину. Детаљи ових поља су следећи:



  • име: Низ за чување имена особе (до 50 знакова)
  • старост: Цео број за чување старости особе
  • висина: Двоструки за чување висине особе

Након дефинисања структуре „Особа“, почиње главна функција која је улазна тачка програма. Први ред у главном програму отвара датотеку под називом „пеопле.бин“. Користимо „стд::офстреам“ да креирамо датотеку под називом „пеопле.бин“ за писање података у бинарном формату. Провера да ли се датотека успешно отвара је веома важна. У супротном, приказује се порука о грешци и програм се зауставља. Дакле, уз помоћ услова „иф“ и функције ис_опен() проверавамо да ли се датотека успешно отворила или не.





Овде се креирају два објекта „Особа“. Дефинишемо две варијабле, “персон1” и “персон2”, типа “Персон”. Додељујемо име променљиве, старост и висину вредности за „Калсоом Илиас“ и „Калсоом Бајва“.

Сада када имамо податке за писање у бинарну датотеку, хајде да извршимо стварну функцију помоћу функције врите(). Користимо „оутФиле.врите“ да упишемо садржај сваког „Персон“ објекта у датотеку. „реинтерпрет_цаст<цхар*>(&персон1)“ и „реинтерпрет_цаст<цхар*>(&персон2)“ претварају целу структуру „Персон“ (укључујући сва њена поља) у непрекидан ток бајтова који је погодан за писање у бинарну датотеку . Записујемо величину сваког објекта „Персон“ користећи „сизеоф(персон1)“ и „сизеоф(персон2)“ да бисмо осигурали да су сви подаци исправно написани.



Након уписивања података у датотеку, веома је важно да је затворите како треба да се подаци не би изгубили због било које друге функције. Користимо оутФиле.цлосе() да ослободимо ресурсе који су повезани са датотеком и осигурамо да су подаци тачно написани. На крају, штампамо поруку која потврђује успешно уписивање података у бинарну датотеку.

Ако објаснимо овај пример једноставнијим речима, замислите посебну бележницу која може да чува податке о људима само на тајном језику. Овај код креира нацрт за организовање информација (име, старост, висина). Отвара свеску, попуњава профиле за две особе, преводи информације на тајни језик и уредно их уписује унутра. Затим безбедно затвара бележницу, чувајући профиле за будућу употребу. Погледајте излаз програма који је дат на следећем снимку:

Метод 2: Писање целих бројева у бинарну датотеку

У овој методи, низ целих бројева се уписује у бинарну датотеку под називом „интегерс.бин“. „реинтерпрет_цаст<цхар*>” третира низ целих бројева као низ знакова (бајтова) за уписивање у датотеку. Ово је посебно важно јер се бинарне датотеке баве сировим бајт подацима. Хајде да погледамо следећи једноставан пример:

#инцлуде <иостреам>

#инцлуде <фстреам>

инт главни ( ) {

стд :: офстреам оутФиле ( 'цели бројеви.бин' , стд :: иос :: бинарни ) ;

ако ( ! оутФиле. је отворен ( ) ) {

стд :: церр << 'Грешка! Не могу да отворим датотеку за писање!' << стд :: ендл ;

повратак 1 ;

}

инт бројевима [ ] = { 42 , 99 , - 1 , 0 } ;

оутФиле. писати ( реинтерпрет_цаст < цхар *> ( бројевима ) , величина ( бројевима ) ) ;

оутФиле. Близу ( ) ;

стд :: цоут << „Дати цели бројеви су успешно уписани у бинарну датотеку.“ << стд :: ендл ;

повратак 0 ;

}

Ево поделе кода са конкретним детаљима:

„#инцлуде <иостреам>” и „#инцлуде <фстреам>” доносе неопходне алате за рад са датотекама и штампање порука као што су цин и врите(), респективно. „стд::офстреам оутФиле(“интегерс.бин”, стд::иос::бинари);” отвара бинарну датотеку под називом „интегерс.бин“ која може да складишти бројеве само у тајном коду (бинарни формат). Проверава да ли је датотека отворена. У супротном, приказује се порука о грешци.

Следећи ред који је „инт нумберс[] = {42, 99, -1, 0};“ дефинише низ под називом „нумберс“ са целим бројевима 42, 99, -1 и 0. „оутФиле.врите(реинтерпрет_цаст<цхар*>(нумберс), сизеоф(нумберс));“ пажљиво преводи целе бројеве у бинарни формат и уписује их у датотеку „интегер.бин“. „оутФиле.цлосе();” затвара датотеку исправно да би цели бројеви били безбедни и организовани. На крају, штампа се порука која потврђује да су цели бројеви успешно сачувани у бинарној датотеци. Погледајте следећи излаз овог програма да бисте видели резултат:

Закључак

Писање бинарних датотека у Ц++ је кључна вештина за ефикасно руковање различитим типовима података. У овом истраживању писања бинарних датотека у Ц++, научили смо како се класа „офстреам“ може користити за ефикасно руковање бинарним подацима. Било да се ради о једноставним целим бројевима или структурираним подацима користећи прилагођене структуре, процес укључује отварање тока датотеке, писање података у бинарном формату, а затим затварање датотеке. Ова могућност омогућава програмерима Ц++-а флексибилност да раде са различитим типовима бинарних података, доприносећи свестраности језика у апликацијама које се крећу од програмирања на нивоу система до мултимедијалне обраде.