Ц++ функција Сеекг().

C Funkcija Seekg



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

Синтакса и параметри функције Сеекг() у Ц++

Сеекг() се може имплементирати са две синтаксе:

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, иос::енд), чита следећих осам знакова са те позиције у бафер, а затим штампа садржај бафера на конзоли. С обзиром на садржај датотеке као „сеекг() функцију“, очекивани излаз је „цтион“. Хајде да ускладимо излаз на снимку екрана следећег излаза:

Закључак

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