Syntaks og parametere for Seekg()-funksjonen i C++
Seekg() kan implementeres med to syntakser:
1. Streampos-syntaks
strøm & søkekg ( streampos innlegg ) ;Denne syntaksen tar bare én parameter, posisjon, som representerer posisjonen til markøren i strømbufferen. Den representerer en 'int'-verdi og av typen streampos.
2. Offset- og retningssyntaks
strøm & søkekg ( strømme av ofte , ios_base :: søke er skitt ) ;Denne syntaksen tar to parametere som input: offset og retning. 'ofst'-parameteren er et heltall av typen streamoff som indikerer forskyvningen i strømmens buffer. 'Smuss'-parameteren søker retning.
- ios_base::beg: Forskjøvet helt fra starten av strømmens buffer.
- ios_base::cur: Forskyvning fra gjeldende posisjon i strømmens buffer.
- ios_base::end: Offset fra den siste av strømmens buffer.
Seekg()-funksjonen i C++ manipulerer filpekeren, slik at programmereren kan plassere den på et bestemt sted i filen. Den returnerer modifikasjonen av 'istream'-objektet (*dette) og justerer filpekeren deretter.
Feil- og unntakshåndtering i C++ Seekg()-funksjonen
Seekg()-funksjonen i C++ sikrer den grunnleggende garantien for unntakshåndtering, og opprettholder objektets gyldighet hvis et unntak oppstår. Det kan kaste 'feil'-unntakene når feilstatusflagget mangler informasjon, og funksjonen fanger og administrerer disse unntakene på en ansvarlig måte, og sender dem tilbake hvis en dårlig bit ble satt i det siste kallet.
Dessuten oppstår et vanlig problem med seekg() når den når slutten av filen (EOF), noe som fører til at pekeren forblir deaktivert og utløser en feil. Clear()-metoden brukes til å tilbakestille pekeren og løse EOF-relaterte feil for å løse dette. I tillegg kan seekg() risikere å endre et strømobjekt i et flertrådsmiljø, noe som krever forsiktighet og implementering av synkroniseringsmekanismer for å redusere potensielle 'ofstream'-objektendringer.
Eksempel 1: Grunnleggende om Seekg()
I det første eksemplet vil vi forklare det grunnleggende om seekg()-funksjonen i C++. Koden til et C++-program er gitt i det følgende. Ta en titt på det først, så går vi videre til forklaringen av hver del av koden.
#include
#include
bruker navneområde std ;
int hoved- ( int argc , røye ** argv ) {
fstream sgFile ( 'seekgFile.txt' , ios :: i | ios :: ute | ios :: stamme ) ;
sgFile << 'seekg() funksjon' ;
sgFile. søkekg ( 8 , ios :: tigge ) ;
røye sgArray [ 8 ] ;
sgFile. lese ( sgArray , 8 ) ;
sgArray [ 8 ] = 0 ;
cout << sgArray << endl ;
sgFile. Lukk ( ) ;
}
Programmet inkluderer to nødvendige header-filer –
fstream sgFile(“seekgFile.txt”, ios::in | ios::out | ios::trunk); – Her opprettes 'sgFile', et objekt av 'fstream'-klassen, som representerer en filstrøm. Filen med navnet 'seekgFile.txt' er knyttet til filstrømmen. Filstrømmen åpnes for input (ios::in) output (ios::out). Hvis filen eksisterer, avkortes innholdet (ios::trunc).
sgFile << 'seekg() funksjon'; – «seekg() function»-strengen skrives til filen ved å bruke «<<»-operatoren.
sgFile.seekg(8, ios::beg); – Seekg()-funksjonen brukes til å sette get-pekeren på 8. posisjon fra begynnelsen (ios::beg) av filen.
sgFile.read(sgArray, 8); – 'Les'-funksjonen brukes til å lese åtte tegn fra den nåværende posisjonen til get-pekeren inn i 'sgArray'.
sgArray[8] = 0; – Null avslutter tegnarrayen for å sikre en riktig strenghåndtering.
cout << sgArray << endl; – Innholdet i 'sgArray' (de 8 tegnene som leses fra filen) vises på konsollen ved hjelp av cout.
sgFile.close(); – Close()-funksjonen brukes til å lukke filstrømmen.
Utgangen fra dette programmet forventes å være 'funksjon'. La oss sjekke det i følgende utdatakode:
Koden oppretter en filstrøm som er assosiert med 'seekgFile.txt'-filen, skriver en streng til filen, søker den åttende posisjonen fra begynnelsen, leser åtte tegn og sender ut det leste innholdet. Til slutt lukkes filstrømmen.
Eksempel 2: Dynamisk navigasjon
Tenk på et scenario der du dynamisk må beregne seekg() offset. La oss forstå hvordan vi dynamisk beregner offset ved hjelp av et kodeeksempel.
#include#include
bruker navneområde std ;
int hoved- ( ) {
ifstream sgFile ( 'seekgFile.txt' ) ;
int offset = 8 ;
sgFile. søkekg ( offset , ios :: sette ) ;
røye buffer [ 8 ] ;
sgFile. lese ( buffer , 8 ) ;
cout << 'Innhold: ' << buffer << endl ;
sgFile. Lukk ( ) ;
komme tilbake 0 ;
}
Som du kan se, leser vi innholdet fra den samme filen som vi opprettet i forrige eksempel, 'seekgFile.txt'. Seekg()-funksjonen setter get-pekeren til gjeldende posisjon (ios::cur) i filen, og den flyttes av den beregnede offset (8 tegn). Read()-funksjonen leser åtte tegn fra den nåværende posisjonen til get-pekeren inn i bufferen.
Gitt innholdet i 'seekg() function'-filen og forskyvningen av åtte tegn, vil programmet sende ut understrengen som starter fra det 9. tegnet i filen. Derfor er det forventede resultatet av programmet 'funksjon'. La oss bekrefte det i følgende gitte utgang:
Dette eksemplet demonstrerer fleksibiliteten til seekg() ved dynamisk å beregne offset.
Eksempel 3: Navigering fra slutten
I dette eksemplet vil vi demonstrere hvordan du leser dataene i en fil fra slutten av filen. Her brukes seekg() til å navigere fra slutten av filen. Den negative forskyvningen indikerer en posisjon som er i forhold til slutten. Se følgende gitte kode:
#include#include
bruker navneområde std ;
int hoved- ( ) {
ifstream sgFile ( 'seekgFile.txt' ) ;
sgFile. søkekg ( - 4 , ios :: slutt ) ;
røye buffer [ 8 ] ;
sgFile. lese ( buffer , 8 ) ;
cout << 'Innhold: ' << buffer << endl ;
sgFile. Lukk ( ) ;
komme tilbake 0 ;
}
Dette C++-programmet åpner en fil med navnet 'seekgFile.txt' som flytter get-pekeren på fire tegn bakover fra slutten av filen ved å bruke sgFile.seekg(-4, ios::end), leser de neste åtte tegnene fra den posisjonen til en buffer, og skriver deretter ut innholdet i bufferen til konsollen. Gitt innholdet i filen som 'seekg()-funksjonen', er den forventede utgangen 'ction'. La oss matche utgangen i skjermbildet av følgende utgang:
Konklusjon
Oppsummert fremstår seekg() som en verdifull ressurs for å navigere i filstrømmene med presisjon. Gjennom sin evne til å søke vilkårlige posisjoner, dynamisk beregne forskyvninger og navigere fra forskjellige punkter i en fil, gir seekg() utviklerne mulighet til å håndtere filoperasjonene effektivt. Som vi har sett i eksemplene, forbedrer mestring av seekg() din kontroll og fleksibilitet når du arbeider med filstrømmer i C++. Det krever imidlertid en nøye vurdering av unntakshåndtering og potensielle datakappløpsscenarier for å sikre robuste og feilfrie filoperasjoner i C++.