Ц++ обезбеђује библиотеку <фстреам> за интеракцију са бинарним датотекама, посебно класом „офстреам“, за писање бинарних података. Ова могућност омогућава програмерима да неприметно креирају, мењају и управљају бинарним датотекама. Овај чланак истражује различите методе и технике за писање бинарних датотека у Ц++, бацајући светло на њихове примене и случајеве употребе.
Напишите бинарну датотеку користећи Ц++
Да бисте сачували податке у бинарну датотеку користећи Ц++, користи се метода врите(). Ова функција уписује одређени број бајтова у назначени ток, почевши од локације „пут” показивача. Ако је показивач „пут“ на крају, датотека се проширује. Међутим, нови подаци замењују постојеће знакове ако је показивач унутар датотеке. У случају грешке током процеса писања, ток је означен као у стању грешке. Сада, пређимо на примере да научимо како писати у бинарну датотеку користећи неке једноставне и уграђене Ц++ функције.
Метод 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. „оутФиле.врите(реинтерпрет_цаст<цхар*>(нумберс), сизеоф(нумберс));“ пажљиво преводи целе бројеве у бинарни формат и уписује их у датотеку „интегер.бин“. „оутФиле.цлосе();” затвара датотеку исправно да би цели бројеви били безбедни и организовани. На крају, штампа се порука која потврђује да су цели бројеви успешно сачувани у бинарној датотеци. Погледајте следећи излаз овог програма да бисте видели резултат:
Закључак
Писање бинарних датотека у Ц++ је кључна вештина за ефикасно руковање различитим типовима података. У овом истраживању писања бинарних датотека у Ц++, научили смо како се класа „офстреам“ може користити за ефикасно руковање бинарним подацима. Било да се ради о једноставним целим бројевима или структурираним подацима користећи прилагођене структуре, процес укључује отварање тока датотеке, писање података у бинарном формату, а затим затварање датотеке. Ова могућност омогућава програмерима Ц++-а флексибилност да раде са различитим типовима бинарних података, доприносећи свестраности језика у апликацијама које се крећу од програмирања на нивоу система до мултимедијалне обраде.