C++ Seekg() Funktsioon

C Seekg Funktsioon



C++ programmeerimisel pakub seekg() funktsioon abi failivoogudes. See on iostreami teegi liige ja leiate selle päisest . See funktsioon võimaldab programmeerijatel manipuleerida, kus algab järgmine sisestusoperatsioon, muutes seeläbi tööprotsessi failidega sujuvamaks. Meetod seekg() võimaldab teil liikuda failis kindlasse asukohta, mis on hindamatu, kui teil on vaja lugeda või töödelda andmeid, mis pole järjestikku korraldatud. Olenemata sellest, kas soovite lugeda faili algusest, keskelt või lõpust, pakub seekg() selliste ülesannete jaoks vajalikku paindlikkust. Kogu selle juhendi jooksul uurime, kuidas seekg() funktsioonid C++-s võimaldavad andmete toomist faili erinevatest punktidest.

Funktsiooni Seekg() süntaks ja parameetrid C++ keeles

Seekg() saab rakendada kahe süntaksiga:

1. Streampose süntaks

oja & seekg ( streampos postitus ) ;

See süntaks võtab ainult ühe parameetri, asukoha, mis tähistab kursori asukohta voopuhvris. See tähistab 'int' väärtust ja tüüpi streampos.







2. Nihke ja suuna süntaks

oja & seekg ( sageli ära voolata , ios_base :: otsida on mustus ) ;

See süntaks võtab sisendiks kaks parameetrit: nihe ja suund. Parameeter „ofst” on streamoff tüüpi täisarv, mis näitab nihet voo puhvris. Parameeter “mustus” otsib suunda.



  • ios_base::beg: nihe voo puhvri algusest.
  • ios_base::cur: nihe praegusest asukohast voo puhvris.
  • ios_base::end: nihe voo viimasest puhvrist.

Funktsioon seekg() C++-s manipuleerib failikursoriga, võimaldades programmeerijal selle failis kindlasse kohta paigutada. See tagastab objekti 'istream' modifikatsiooni (*this) ja kohandab failikursorit vastavalt.



Vigade ja erandite käsitlemine funktsioonis C++ Seekg()

Funktsioon seekg() C++-s tagab erandite käsitlemise põhigarantii, säilitades erandi ilmnemisel objekti kehtivuse. Kui tõrkeseisundi lipul puudub teave, võib see anda 'tõrke' erandid ning funktsioon püüab need erandid vastutustundlikult kinni ja haldab, visates need uuesti, kui viimases kõnes oli seatud vigane bit.





Lisaks ilmneb seekg() tavaline probleem, kui see jõuab faili lõppu (EOF), mille tõttu kursor jääb määramata ja käivitab vea. Kursori lähtestamiseks ja EOF-iga seotud vigade lahendamiseks kasutatakse meetodit clear(). Lisaks võib seekg() ohustada vooobjekti muutmist mitme lõimega keskkonnas, mis nõuab ettevaatust ja sünkroonimismehhanismide rakendamist, et leevendada võimalikke vooväliseid objektimuutusi.

Näide 1: Seekg() põhitõed

Esimeses näites selgitame C++ funktsiooni seekg() põhitõdesid. C++ programmi kood on toodud järgnevalt. Kõigepealt vaadake seda ja seejärel jätkame koodi iga jaotise selgitusega.



#include

#include

kasutades nimeruumi std ;

int peamine ( int argc , char ** argv ) {

fstream sgFile ( 'seekgFile.txt' , ios :: sisse | ios :: välja | ios :: pagasiruumi ) ;

sgFile << 'seekg() funktsioon' ;

sgFile. seekg ( 8 , ios :: kerjama ) ;

char sgArray [ 8 ] ;

sgFile. lugeda ( sgArray , 8 ) ;

sgArray [ 8 ] = 0 ;

cout << sgArray << endl ;

sgFile. Sulge ( ) ;

}

Programm sisaldab kahte vajalikku päisefaili – ja – vastavalt failide käsitlemiseks ja sisend/väljundoperatsioonideks. Seejärel kuvatakse 'kasutades nimeruumi std;' avaldus on kaasatud, võimaldades standardseid C++ identifikaatoreid ilma nimeruumi selgesõnaliselt täpsustamata. Lõpuks algab põhifunktsioon, mis on programmi sisenemispunkt, võttes käsurea argumendid (argc ja argv).

fstream sgFile(“seekgFail.txt”, ios::in | ios::out | ios::pagasiruumi); – Siin luuakse 'fstream' klassi objekt 'sgFile', mis esindab failivoogu. Fail nimega 'seekgFile.txt' on seotud failivooga. Failivoog avatakse sisendi (ios::in) väljundi jaoks (ios::out). Kui fail on olemas, siis selle sisu kärbitakse (ios::trunc).

sgFile << “seekg() funktsioon”; – String 'seekg() function' kirjutatakse faili kasutades operaatorit '<<'.

sgFile.seekg(8, ios::beg); – Funktsiooni seekg() kasutatakse hankimisosuti seadmiseks faili algusest (ios::beg) 8. positsioonile.

sgFile.read(sgArray, 8); – Funktsiooni 'lugemine' kasutatakse kaheksa märgi lugemiseks hankimisosuti praegusest asukohast 'sgArray'-sse.

sgArray[8] = 0; – Null lõpetab märgimassiivi, et tagada õige stringide käsitlemine.

cout << sgArray << endl; – 'sgArray' sisu (failist loetud 8 tähemärki) kuvatakse konsoolil kasutades cout.

sgFile.close(); – Funktsiooni close() kasutatakse failivoo sulgemiseks.

Selle programmi väljundiks on eeldatavasti 'funktsioon'. Kontrollime seda järgmises väljundi katkendis:

Kood loob failivoo, mis on seotud failiga 'seekgFile.txt', kirjutab faili stringi, otsib algusest peale 8. positsiooni, loeb kaheksa tähemärki ja väljastab loetud sisu. Lõpuks suletakse failivoog.

Näide 2: Dünaamiline navigeerimine

Mõelge stsenaariumile, kus peate dünaamiliselt arvutama seekg() nihke. Saame aru, kuidas koodinäite abil nihet dünaamiliselt arvutada.

#include

#include

kasutades nimeruumi std ;

int peamine ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

int nihe = 8 ;

sgFile. seekg ( nihe , ios :: pane ) ;

char puhver [ 8 ] ;

sgFile. lugeda ( puhver , 8 ) ;

cout << 'Sisu: ' << puhver << endl ;

sgFile. Sulge ( ) ;

tagasi 0 ;

}

Nagu näete, loeme sisu samast failist, mille lõime eelmises näites 'seekgFile.txt'. Funktsioon seekg() seab hankimisosuti faili praegusesse asukohta (ios::cur) ja seda liigutatakse arvutatud nihke võrra (8 märki). Funktsioon read() loeb puhvrisse hankimisosuti praegusest asukohast kaheksa märki.

Arvestades funktsiooni seekg() faili sisu ja kaheksa märgi nihet, väljastab programm alamstringi, mis algab faili 9. märgist. Seetõttu on programmi eeldatav tulemus 'funktsioon'. Kinnitagem seda järgmises antud väljundis:

See näide demonstreerib seekg() paindlikkust, arvutades nihke dünaamiliselt.

Näide 3: Navigeerimine lõpust

Selles näites demonstreerime, kuidas lugeda failis olevaid andmeid faili lõpust. Siin kasutatakse faili lõpust navigeerimiseks seekg(). Negatiivne nihe näitab positsiooni, mis on lõpu suhtes. Vaadake järgmist antud koodi:

#include

#include

kasutades nimeruumi std ;

int peamine ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

sgFile. seekg ( - 4 , ios :: lõpp ) ;

char puhver [ 8 ] ;

sgFile. lugeda ( puhver , 8 ) ;

cout << 'Sisu: ' << puhver << endl ;

sgFile. Sulge ( ) ;

tagasi 0 ;

}

See C++ programm avab faili nimega 'seekgFile.txt', mis liigutab nelja märgi pikkust hankimiskursorit faili lõpust tagasi, kasutades faili sgFile.seekg(-4, ios::end), loeb järgmised kaheksa tähemärki sellest kohast puhvri ja prindib seejärel puhvri sisu konsooli. Arvestades faili sisu 'seekg() funktsioonina', on oodatav väljund 'ction'. Sobitagem järgmise väljundi ekraanipildi väljund:

Järeldus

Kokkuvõtteks võib öelda, et seekg() on väärtuslik väärtus failivoogudes täpseks navigeerimiseks. Seekg() võimaldab otsida suvalisi positsioone, arvutada dünaamiliselt nihkeid ja navigeerida failis erinevatest punktidest, võimaldades arendajatel failitoiminguid tõhusalt hallata. Nagu näidetes nägime, suurendab seekg() valdamine teie kontrolli ja paindlikkust C++ failivoogudega töötamisel. Siiski nõuab see erandite käsitlemise ja võimalike andmevõistluse stsenaariumide hoolikat kaalumist, et tagada C++-s töökindel ja vigadeta failitoimingud.