C++ Seekg() funkcija

C Seekg Funkcija



Programuojant C++, funkcija seekg () teikia pagalbą failų srautuose. Tai yra „iostream“ bibliotekos narys ir ją rasite antraštėje. Ši funkcija leidžia programuotojams manipuliuoti, kur prasideda kita įvesties operacija, taip supaprastinant darbo procesą su failais. Seekg() metodas leidžia pereiti į konkrečią failo vietą, kuri yra neįkainojama, kai reikia skaityti arba apdoroti duomenis, kurie nėra tvarkomi nuosekliai. Nesvarbu, ar norite skaityti nuo failo pradžios, vidurio ar pabaigos, seekg() suteikia lankstumo, reikalingo tokioms užduotims atlikti. Šiame vadove mes gilinsimės į tai, kaip seekg() funkcijos C++ leidžia gauti duomenis iš įvairių failo taškų.

Funkcijos Seekg() sintaksė ir parametrai C++

Seekg () gali būti įgyvendintas naudojant dvi sintakses:

1. Streampos sintaksė

srautas & seekg ( streampos post ) ;

Ši sintaksė užima tik vieną parametrą, poziciją, kuri nurodo žymeklio padėtį srauto buferyje. Tai reiškia „int“ reikšmę ir tipo streampos.







2. Poslinkio ir krypties sintaksė

srautas & seekg ( dažnai nuteka , ios_base :: ieškoti yra purvas ) ;

Ši sintaksė kaip įvestį naudoja du parametrus: poslinkį ir kryptį. Parametras „ofst“ yra sveikasis srauto tipo skaičius, nurodantis poslinkį srauto buferyje. Parametras „purvas“ ieško krypties.



  • ios_base::beg: nukrypsta nuo pačios srauto buferio pradžios.
  • ios_base::cur: poslinkis nuo dabartinės padėties srauto buferyje.
  • ios_base::end: poslinkis nuo paskutinio srauto buferio.

Funkcija seekg () programoje C++ manipuliuoja failo žymekliu, todėl programuotojas gali padėti jį konkrečioje failo vietoje. Jis grąžina „istream“ objekto modifikaciją (*this) ir atitinkamai pakoreguoja failo žymeklį.



Klaidų ir išimčių tvarkymas naudojant C++ Seekg() funkciją

Funkcija seekg() programoje C++ užtikrina pagrindinę išimčių tvarkymo garantiją, išsaugodama objekto galiojimą, jei įvyktų išimtis. Ji gali pateikti „gedimo“ išimtis, kai klaidos būsenos vėliavėlėje trūksta informacijos, o funkcija atsakingai pagauna ir valdo šias išimtis, atmesdama jas iš naujo, jei paskutiniame iškvietime buvo nustatytas blogas bitas.





Be to, dažna su seekg() problema iškyla, kai ji pasiekia failo pabaigą (EOF), todėl žymeklis lieka nenustatytas ir suaktyvinama klaida. Clear() metodas naudojamas žymekliui iš naujo nustatyti ir su EOF susijusioms klaidoms išspręsti. Be to, seekg() gali pakeisti srauto objektą kelių gijų aplinkoje, todėl reikia būti atsargiems ir įdiegti sinchronizavimo mechanizmus, kad sušvelnintų galimus „srautinio“ objekto pakeitimus.

1 pavyzdys: Seekg() pagrindai

Pirmajame pavyzdyje paaiškinsime C++ funkcijos seekg() pagrindus. Toliau pateikiamas C++ programos kodas. Pirmiausia pažiūrėkite į tai, o tada pereisime prie kiekvienos kodo dalies paaiškinimo.



#include

#include

naudojant vardų sritį std ;

tarpt pagrindinis ( tarpt argc , char ** argv ) {

fstream sgFile ( 'seekgFile.txt' , ios :: in | ios :: išeiti | ios :: bagažinė ) ;

sgFailas << 'seekg() funkcija' ;

sgFailas. seekg ( 8 , ios :: elgetauti ) ;

char sgArray [ 8 ] ;

sgFailas. skaityti ( sgArray , 8 ) ;

sgArray [ 8 ] = 0 ;

cout << sgArray << endl ;

sgFailas. Uždaryti ( ) ;

}

Programoje yra du būtini antraščių failai – ir – atitinkamai failų tvarkymui ir įvesties/išvesties operacijoms. Po to „naudojant vardų erdvę std;“ įtrauktas teiginys, leidžiantis naudoti standartinius C++ identifikatorius, aiškiai nenurodant vardų srities. Galiausiai prasideda pagrindinė funkcija, kuri yra programos įėjimo taškas, naudojant komandinės eilutės argumentus (argc ir argv).

fstream sgFile('seekgFile.txt', ios::in | ios::out | ios::trunk); – Čia sukuriamas „sgFile“, „fstream“ klasės objektas, vaizduojantis failų srautą. Failas pavadinimu „seekgFile.txt“ yra susietas su failo srautu. Failų srautas atidaromas įvesties (ios::in) išvestimi (ios::out). Jei failas yra, jo turinys yra sutrumpintas (ios::trunc).

sgFile << 'seekg() funkcija'; – „Seekg() function“ eilutė įrašoma į failą naudojant „<<“ operatorių.

sgFile.seekg(8, ios::beg); – Funkcija seekg() naudojama norint nustatyti gavimo žymeklį 8-oje vietoje nuo failo pradžios (ios::beg).

sgFile.read(sgArray, 8); – Funkcija „skaityti“ naudojama aštuoniems simboliams nuskaityti iš dabartinės gavimo žymeklio padėties į „sgArray“.

sgArray[8] = 0; – Null baigia simbolių masyvą, kad būtų užtikrintas tinkamas eilučių tvarkymas.

cout << sgArray << endl; – „sgArray“ turinys (8 simboliai, nuskaityti iš failo) rodomas konsolėje naudojant cout.

sgFile.close(); – Funkcija close() naudojama failų srautui uždaryti.

Tikimasi, kad šios programos išvestis bus „funkcija“. Patikrinkime tai šiame išvesties fragmente:

Kodas sukuria failo srautą, susietą su „seekgFile.txt“ failu, įrašo į failą eilutę, ieško 8 pozicijos nuo pat pradžių, nuskaito aštuonis simbolius ir išveda nuskaitytą turinį. Galiausiai failų srautas uždaromas.

2 pavyzdys: Dinaminė navigacija

Apsvarstykite scenarijų, kai turite dinamiškai apskaičiuoti seekg() poslinkį. Supraskime, kaip dinamiškai apskaičiuoti poslinkį naudojant kodo pavyzdį.

#include

#include

naudojant vardų sritį std ;

tarpt pagrindinis ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

tarpt kompensuoti = 8 ;

sgFailas. seekg ( kompensuoti , ios :: įdėti ) ;

char buferis [ 8 ] ;

sgFailas. skaityti ( buferis , 8 ) ;

cout << 'Turinys: ' << buferis << endl ;

sgFailas. Uždaryti ( ) ;

grąžinti 0 ;

}

Kaip matote, turinį skaitome iš to paties failo, kurį sukūrėme ankstesniame pavyzdyje „seekgFile.txt“. Funkcija seekg() nustato gavimo žymeklį dabartinėje failo vietoje (ios::cur) ir ji perkeliama pagal apskaičiuotą poslinkį (8 simboliai). Funkcija read() nuskaito aštuonis simbolius iš dabartinės gavimo rodyklės padėties į buferį.

Atsižvelgdama į „seekg() function“ failo turinį ir aštuonių simbolių poslinkį, programa išves poeilelę, kuri prasideda nuo 9-ojo failo simbolio. Todėl laukiamas programos rezultatas yra „funkcija“. Patvirtinkime tai pateiktoje išvestyje:

Šis pavyzdys parodo seekg() lankstumą dinamiškai apskaičiuojant poslinkį.

3 pavyzdys: naršymas iš pabaigos

Šiame pavyzdyje parodysime, kaip nuskaityti duomenis faile nuo failo pabaigos. Čia seekg() naudojamas naršyti iš failo pabaigos. Neigiamas poslinkis rodo padėtį, kuri yra palyginti su galu. Žiūrėkite toliau pateiktą kodą:

#include

#include

naudojant vardų sritį std ;

tarpt pagrindinis ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

sgFailas. seekg ( - 4 , ios :: galas ) ;

char buferis [ 8 ] ;

sgFailas. skaityti ( buferis , 8 ) ;

cout << 'Turinys: ' << buferis << endl ;

sgFailas. Uždaryti ( ) ;

grąžinti 0 ;

}

Ši C++ programa atidaro failą pavadinimu 'seekgFile.txt', kuris perkelia keturių simbolių gavimo žymeklį atgal nuo failo pabaigos naudojant sgFile.seekg(-4, ios::end), nuskaito kitus aštuonis simbolius iš tos vietos į buferį, o tada išspausdina buferio turinį į konsolę. Atsižvelgiant į failo turinį kaip 'seekg() funkciją', laukiama išvestis yra 'ction'. Suderinkime išvestį šios išvesties ekrano kopijoje:

Išvada

Apibendrinant galima pasakyti, kad seekg() pasirodo kaip vertingas turtas norint tiksliai naršyti failų srautuose. Dėl savo gebėjimo ieškoti savavališkų pozicijų, dinamiškai apskaičiuoti poslinkius ir naršyti iš skirtingų failo taškų, seekg() įgalina kūrėjus efektyviai tvarkyti failo operacijas. Kaip matėme pavyzdžiuose, įvaldę seekg () padidinsite valdymą ir lankstumą dirbant su failų srautais C++. Tačiau norint užtikrinti patikimas ir be klaidų C++ failų operacijas, reikia atidžiai apsvarstyti išimčių tvarkymą ir galimus duomenų lenktynių scenarijus.