C++ Seekg() funksjon

C Seekg Funksjon



I C++-programmering gir seekg()-funksjonen hjelp i filstrømmene. Det er medlem av iostream-biblioteket, og du finner det i -overskriften. Denne funksjonen lar programmererne manipulere hvor neste inndataoperasjon begynner, og dermed strømlinjeforme arbeidsprosessen med filer. Seekg()-metoden lar deg hoppe til et bestemt sted i en fil som er uvurderlig når du trenger å lese eller behandle data som ikke er sekvensielt organisert. Enten du har som mål å lese fra begynnelsen, midten eller slutten av en fil, gir seekg() fleksibiliteten som kreves for slike oppgaver. Gjennom denne veiledningen vil vi fordype oss i hvordan seekg() fungerer i C++ muliggjør datahenting fra forskjellige punkter i en fil.

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 – og – for henholdsvis filhåndtering og input/output-operasjoner. Etterpå vil 'bruke navneområde std;' setningen er inkludert, og tillater standard C++-identifikatorer uten å spesifisere navneområdet eksplisitt. Til slutt begynner hovedfunksjonen, som er programmets inngangspunkt, og tar kommandolinjeargumentene (argc og argv).

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