C++ Seekg() Funktion

C Seekg Funktion



I C++-programmering giver funktionen seekg() hjælp til filstrømmene. Det er medlem af iostream-biblioteket, og du finder det i -headeren. Denne funktion giver programmørerne mulighed for at manipulere, hvor den næste input-operation begynder, og derved strømline arbejdsprocessen med filer. Seekg()-metoden lader dig springe til en bestemt placering i en fil, som er uvurderlig, når du skal læse eller behandle data, der ikke er sekventielt organiseret. Uanset om du sigter efter at læse fra begyndelsen, midten eller slutningen af ​​en fil, giver seekg() den fleksibilitet, der kræves til sådanne opgaver. Gennem denne guide vil vi dykke ned i, hvordan seekg() fungerer i C++ muliggør datahentning fra forskellige punkter i en fil.

Syntaks og parametre for funktionen Seekg() i C++

Seekg() kan implementeres med to syntakser:

1. Streampos Syntaks

strøm & søg kg ( streampos indlæg ) ;

Denne syntaks tager kun én parameter, position, som repræsenterer markørens position i streambufferen. Det repræsenterer en 'int'-værdi og af typen streampos.







2. Offset og retningssyntaks

strøm & søg kg ( strømme af ofte , ios_base :: søge er smuds ) ;

Denne syntaks tager to parametre som input: offset og retning. Parameteren 'ofst' er et heltal af typen streamoff, der angiver offset i streamens buffer. Parameteren 'snavs' søger retning.



  • ios_base::beg: Forskudt fra starten af ​​streamens buffer.
  • ios_base::cur: Forskudt fra den aktuelle position i strømmens buffer.
  • ios_base::end: Offset fra den sidste af streamens buffer.

Seekg()-funktionen i C++ manipulerer filmarkøren, hvilket gør det muligt for programmøren at placere den på et bestemt sted i filen. Det returnerer modifikationen af ​​'istream'-objektet (*dette) og justerer filmarkøren i overensstemmelse hermed.



Fejl- og undtagelseshåndtering i C++ Seekg()-funktionen

Seekg()-funktionen i C++ sikrer den grundlæggende garanti for undtagelseshåndtering, idet objektets gyldighed opretholdes, hvis der opstår en undtagelse. Det kan kaste 'fejl'-undtagelserne, når fejltilstandsflaget mangler information, og funktionen fanger og administrerer disse undtagelser på en ansvarlig måde, og gengiver dem, hvis der blev sat en dårlig bit i det sidste kald.





Desuden opstår et almindeligt problem med seekg() når den når filens ende (EOF), hvilket får markøren til at forblive deaktiveret og udløser en fejl. Clear()-metoden bruges til at nulstille markøren og løse de EOF-relaterede fejl for at løse dette. Derudover kan seekg() risikere at ændre et stream-objekt i et multithreaded-miljø, hvilket nødvendiggør forsigtighed og implementering af synkroniseringsmekanismer for at afbøde de potentielle 'ofstream'-objektændringer.

Eksempel 1: Grundlæggende om Seekg()

I det første eksempel vil vi forklare det grundlæggende i funktionen seekg() i C++. Koden for et C++-program er angivet i det følgende. Tag et kig på det først, og så vil vi gå videre til forklaringen af ​​hver del af koden.



#include

#include

bruger navneområde std ;

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

fstream sgFile ( 'seekgFile.txt' , ios :: i | ios :: ud | ios :: bagagerum ) ;

sgFile << 'sekg() funktion' ;

sgFile. søg kg ( 8 , ios :: tigge ) ;

char sgArray [ 8 ] ;

sgFile. Læs ( sgArray , 8 ) ;

sgArray [ 8 ] = 0 ;

cout << sgArray << endl ;

sgFile. tæt ( ) ;

}

Programmet inkluderer to nødvendige header-filer – og – til henholdsvis filhåndtering og input/output-operationer. Bagefter, 'brug af navneområde std;' sætning er inkluderet, hvilket tillader standard C++ identifikatorer uden at specificere navneområdet eksplicit. Til sidst begynder hovedfunktionen, som er programmets indgangspunkt, og tager kommandolinjeargumenterne (argc og argv).

fstream sgFile(“seekgFile.txt”, ios::in | ios::out | ios::trunk); – Her oprettes 'sgFile', et objekt af klassen 'fstream', som repræsenterer en filstrøm. Filen med navnet 'seekgFile.txt' er knyttet til filstrømmen. Filstrømmen åbnes for input (ios::in) output (ios::out). Hvis filen eksisterer, afkortes dens indhold (ios::trunc).

sgFile << 'seekg() funktion'; – Strengen 'seekg() funktion' skrives til filen ved hjælp af operatoren '<<'.

sgFile.seekg(8, ios::beg); – Seekg()-funktionen bruges til at sætte get-markøren til den 8. position fra begyndelsen (ios::beg) af filen.

sgFile.read(sgArray, 8); – 'Læs'-funktionen bruges til at læse otte tegn fra den aktuelle position af get-markøren ind i 'sgArray'.

sgArray[8] = 0; – Null afslutter tegnarrayet for at sikre en korrekt strenghåndtering.

cout << sgArray << endl; – Indholdet af 'sgArray' (de 8 tegn læst fra filen) vises på konsollen ved hjælp af cout.

sgFile.close(); – Funktionen close() bruges til at lukke filstrømmen.

Outputtet af dette program forventes at være 'funktion'. Lad os tjekke det i følgende output-snippet:

Koden opretter en filstrøm, der er knyttet til filen 'seekgFile.txt', skriver en streng til filen, søger den 8. position fra begyndelsen, læser otte tegn og udlæser det læste indhold. Til sidst lukkes filstrømmen.

Eksempel 2: Dynamisk navigation

Overvej et scenario, hvor du dynamisk skal beregne seekg() offset. Lad os forstå, hvordan man dynamisk beregner offset ved hjælp af et kodeeksempel.

#include

#include

bruger navneområde std ;

int vigtigste ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

int offset = 8 ;

sgFile. søg kg ( offset , ios :: sætte ) ;

char buffer [ 8 ] ;

sgFile. Læs ( buffer , 8 ) ;

cout << 'Indhold: ' << buffer << endl ;

sgFile. tæt ( ) ;

Vend tilbage 0 ;

}

Som du kan se, læser vi indholdet fra den samme fil, som vi oprettede i det foregående eksempel, 'seekgFile.txt'. Seekg()-funktionen sætter get-markøren til den aktuelle position (ios::cur) i filen, og den flyttes af den beregnede offset (8 tegn). Read()-funktionen læser otte tegn fra den aktuelle position af get-markøren ind i bufferen.

Givet indholdet af 'seekg() function'-filen og forskydningen på otte tegn, vil programmet udlæse den understreng, der starter fra det 9. tegn i filen. Derfor er det forventede resultat af programmet 'funktion'. Lad os bekræfte det i følgende givne output:

Dette eksempel demonstrerer fleksibiliteten af ​​seekg() ved dynamisk at beregne offset.

Eksempel 3: Navigering fra slutningen

I dette eksempel vil vi demonstrere, hvordan man læser dataene i en fil fra slutningen af ​​filen. Her bruges seekg() til at navigere fra slutningen af ​​filen. Den negative offset angiver en position, der er i forhold til enden. Se følgende givne kode:

#include

#include

bruger navneområde std ;

int vigtigste ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

sgFile. søg kg ( - 4 , ios :: ende ) ;

char buffer [ 8 ] ;

sgFile. Læs ( buffer , 8 ) ;

cout << 'Indhold: ' << buffer << endl ;

sgFile. tæt ( ) ;

Vend tilbage 0 ;

}

Dette C++-program åbner en fil med navnet 'seekgFile.txt', som flytter get-markøren på fire tegn bagud fra slutningen af ​​filen ved hjælp af sgFile.seekg(-4, ios::end), læser de næste otte tegn fra den position til en buffer, og udskriver derefter indholdet af bufferen til konsollen. Givet indholdet af filen som 'seekg() funktion', er det forventede output 'ction'. Lad os matche outputtet i skærmbilledet af følgende output:

Konklusion

Sammenfattende fremstår seekg() som et værdifuldt aktiv til at navigere i filstrømmene med præcision. Gennem sin evne til at søge vilkårlige positioner, dynamisk beregne forskydninger og navigere fra forskellige punkter i en fil, giver seekg() udviklerne mulighed for at håndtere filoperationerne effektivt. Som vi har set i eksemplerne, forbedrer mastering af seekg() din kontrol og fleksibilitet, når du arbejder med filstrømme i C++. Det kræver dog en nøje overvejelse af undtagelseshåndtering og potentielle datarace-scenarier for at sikre robuste og fejlfri filoperationer i C++.