Синтакса и параметри функције Сеекг() у Ц++
Сеекг() се може имплементирати са две синтаксе:
1. Стреампос синтакса
поток & сеекг ( стреампос пост ) ;Ова синтакса узима само један параметар, позицију, која представља позицију курсора у баферу тока. Представља вредност „инт“ и типа стреампос.
2. Синтакса одступања и правца
поток & сеекг ( стреам офф често , иос_басе :: тражити је прљавштина ) ;Ова синтакса узима два параметра као улаз: помак и правац. Параметар „офст“ је цео број типа стреамофф који указује на помак у баферу тока. Параметар „прљавштине“ тражи правац.
- иос_басе::бег: Помак од самог почетка бафера тока.
- иос_басе::цур: Помак од тренутне позиције у баферу тока.
- иос_басе::енд: Помак од последњег бафера тока.
Сеекг() функција у Ц++ манипулише показивачем датотеке, омогућавајући програмеру да га позиционира на одређеној локацији унутар датотеке. Враћа модификацију „истреам“ објекта (*ово) и у складу са тим прилагођава показивач датотеке.
Руковање грешкама и изузецима у функцији Ц++ Сеекг().
Сеекг() функција у Ц++ обезбеђује основну гаранцију за руковање изузетком, одржавајући валидност објекта ако дође до изузетка. Може да избаци изузетке „неуспеха“ када заставици стања грешке недостају информације, а функција одговорно хвата и управља тим изузецима, поново их баца ако је у последњем позиву постављен лош бит.
Штавише, чест проблем са сеекг() јавља се када дође до краја датотеке (ЕОФ), што доводи до тога да показивач остане неподељен и изазива грешку. Метода цлеар() се користи за ресетовање показивача и решавање грешака у вези са ЕОФ-ом да би се ово решило. Поред тога, сеекг() може да ризикује да промени објекат стрима у вишенитном окружењу, што захтева опрез и примену механизама синхронизације да би се ублажиле потенцијалне промене објеката „офстреам”.
Пример 1: Основе Сеекг()
У првом примеру ћемо објаснити основе функције сеекг() у Ц++. Код Ц++ програма је дат у наставку. Прво га погледајте, а затим ћемо прећи на објашњење сваког одељка кода.
#инцлуде <фстреам>
#инцлуде <иостреам>
користећи простор имена стд ;
инт главни ( инт аргц , цхар ** аргв ) {
фстреам сгФиле ( 'сеекгФиле.ткт' , иос :: ин | иос :: оут | иос :: пртљажник ) ;
сгФиле << 'сеекг() функција' ;
сгФиле. сеекг ( 8 , иос :: молити ) ;
цхар сгАрраи [ 8 ] ;
сгФиле. читати ( сгАрраи , 8 ) ;
сгАрраи [ 8 ] = 0 ;
цоут << сгАрраи << ендл ;
сгФиле. Близу ( ) ;
}
Програм укључује две неопходне датотеке заглавља – <фстреам> и <иостреам> – за руковање датотекама и операције уноса/излаза, респективно. Након тога, „усинг намеспаце стд;“ исказ је укључен, дозвољавајући стандардне Ц++ идентификаторе без експлицитног навођења простора имена. Коначно, почиње главна функција, која је улазна тачка програма, узимајући аргументе командне линије (аргц и аргв).
фстреам сгФиле(“сеекгФиле.ткт”, иос::ин | иос::оут | иос::трунк); – Овде се креира „сгФиле“, објекат класе „фстреам“, који представља ток датотека. Датотека под називом „сеекгФиле.ткт“ је повезана са током датотеке. Стрим датотеке се отвара за улаз (иос::ин) излаз (иос::оут). Ако датотека постоји, њен садржај је скраћен (иос::трунц).
сгФиле << “сеекг() функција”; – Низ функције „сеекг()“ се уписује у датотеку помоћу оператора „<<“.
сгФиле.сеекг(8, иос::бег); – Сеекг() функција се користи за постављање гет показивача на 8. позицију од почетка (иос::бег) датотеке.
сгФиле.реад(сгАрраи, 8); – Функција „читај“ се користи за читање осам знакова са тренутне позиције гет показивача у „сгАрраи“.
сгАрраи[8] = 0; – Нулл завршава низ знакова да би се обезбедило правилно руковање стринговима.
цоут << сгАрраи << ендл; – Садржај „сгАрраи“ (8 знакова прочитаних из датотеке) се приказује на конзоли помоћу цоут.
сгФиле.цлосе(); – Цлосе() функција се користи за затварање тока датотека.
Очекује се да ће излаз овог програма бити „функција“. Хајде да то проверимо у следећем излазном исечку:
Код креира ток датотеке који је повезан са датотеком „сеекгФиле.ткт“, уписује стринг у датотеку, тражи 8. позицију од почетка, чита осам знакова и излази прочитани садржај. Коначно, ток датотека је затворен.
Пример 2: Динамичка навигација
Размислите о сценарију у којем морате динамички израчунати сеекг() офсет. Хајде да разумемо како да динамички израчунамо офсет уз помоћ примера кода.
#инцлуде <иостреам>#инцлуде <фстреам>
користећи простор имена стд ;
инт главни ( ) {
ифстреам сгФиле ( 'сеекгФиле.ткт' ) ;
инт офсет = 8 ;
сгФиле. сеекг ( офсет , иос :: ставити ) ;
цхар тампон [ 8 ] ;
сгФиле. читати ( тампон , 8 ) ;
цоут << 'Садржај: ' << тампон << ендл ;
сгФиле. Близу ( ) ;
повратак 0 ;
}
Као што видите, читамо садржај из исте датотеке коју смо креирали у претходном примеру, „сеекгФиле.ткт“. Сеекг() функција поставља гет показивач на тренутну позицију (иос::цур) у датотеци и помера се за израчунати помак (8 знакова). Функција реад() чита осам знакова са тренутне позиције гет показивача у бафер.
С обзиром на садржај датотеке „сеекг() фунцтион” и помак од осам знакова, програм ће исписати подниз који почиње од 9. знака датотеке. Дакле, очекивани резултат програма је „функција“. Потврдимо то у следећем датом излазу:
Овај пример показује флексибилност сеекг() динамичким израчунавањем офсета.
Пример 3: Кретање са краја
У овом примеру ћемо показати како читати податке у датотеци са краја датотеке. Овде сеекг() користи за навигацију од краја датотеке. Негативан помак означава позицију која је релативна у односу на крај. Погледајте следећи код:
#инцлуде <иостреам>#инцлуде <фстреам>
користећи простор имена стд ;
инт главни ( ) {
ифстреам сгФиле ( 'сеекгФиле.ткт' ) ;
сгФиле. сеекг ( - 4 , иос :: крај ) ;
цхар тампон [ 8 ] ;
сгФиле. читати ( тампон , 8 ) ;
цоут << 'Садржај: ' << тампон << ендл ;
сгФиле. Близу ( ) ;
повратак 0 ;
}
Овај Ц++ програм отвара датотеку под називом „сеекгФиле.ткт“ која помера гет показивач од четири знака уназад са краја датотеке користећи сгФиле.сеекг(-4, иос::енд), чита следећих осам знакова са те позиције у бафер, а затим штампа садржај бафера на конзоли. С обзиром на садржај датотеке као „сеекг() функцију“, очекивани излаз је „цтион“. Хајде да ускладимо излаз на снимку екрана следећег излаза:
Закључак
Укратко, сеекг() се појављује као драгоцено средство за прецизно кретање кроз токове датотека. Својом способношћу да тражи произвољне позиције, динамички израчунава помаке и креће се из различитих тачака унутар датотеке, сеекг() омогућава програмерима да ефикасно руководе операцијама датотека. Као што смо видели у примерима, савладавање сеекг() побољшава вашу контролу и флексибилност када радите са токовима датотека у Ц++. Међутим, то захтева пажљиво разматрање руковања изузетцима и потенцијалних сценарија трке података како би се обезбедиле робусне операције датотека без грешака у Ц++.