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 –
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.