Funkcija C++ Seekg().

Funkcija C Seekg



U C++ programiranju funkcija seekg() pruža pomoć unutar tokova datoteka. Član je biblioteke iostream i pronaći ćete ga u zaglavlju . Ova funkcija omogućuje programerima da manipuliraju gdje počinje sljedeća operacija unosa, čime se pojednostavljuje radni proces s datotekama. Metoda seekg() omogućuje vam skok na određeno mjesto u datoteci što je neprocjenjivo kada trebate pročitati ili obraditi podatke koji nisu sekvencijalno organizirani. Bilo da namjeravate čitati od početka, sredine ili kraja datoteke, seekg() pruža fleksibilnost koja je potrebna za takve zadatke. U ovom vodiču istražit ćemo kako funkcija seekg() u C++-u omogućuje dohvaćanje podataka s različitih točaka unutar datoteke.

Sintaksa i parametri funkcije Seekg() u C++

Seekg() se može implementirati s dvije sintakse:

1. Streampos sintaksa

potok i tražiti ( streampos post ) ;

Ova sintaksa uzima samo jedan parametar, poziciju, koja predstavlja poziciju kursora u međuspremniku toka. Predstavlja 'int' vrijednost i tipa streampos.







2. Sintaksa odmaka i smjera

potok i tražiti ( strujati često , ios_baza :: tražiti je prljavština ) ;

Ova sintaksa uzima dva parametra kao ulaz: pomak i smjer. Parametar 'ofst' je cijeli broj tipa streamoff koji označava pomak u međuspremniku toka. Parametar 'prljavštine' traži smjer.



  • ios_base::beg: Pomak od samog početka međuspremnika streama.
  • ios_base::cur: Pomak od trenutne pozicije u međuspremniku streama.
  • ios_base::end: Pomak od posljednjeg međuspremnika toka.

Funkcija seekg() u C++ manipulira pokazivačem datoteke, omogućujući programeru da ga postavi na određeno mjesto unutar datoteke. Vraća modifikaciju 'istream' objekta (*this) i prema tome prilagođava pokazivač datoteke.



Rukovanje pogreškama i iznimkama u funkciji C++ Seekg().

Funkcija seekg() u C++ osigurava osnovno jamstvo za rukovanje iznimkama, održavajući valjanost objekta ako se iznimka dogodi. Može izbaciti iznimke 'neuspjeha' kada oznaka stanja pogreške nema informacije, a funkcija odgovorno hvata te iznimke i upravlja njima, ponovno ih izbacujući ako je u zadnjem pozivu postavljen loš bit.





Štoviše, čest problem sa seekg() javlja se kada dođe do kraja datoteke (EOF), uzrokujući da pokazivač ostane nepostavljen i pokreće pogrešku. Metoda clear() koristi se za resetiranje pokazivača i rješavanje pogrešaka povezanih s EOF-om kako bi se to riješilo. Dodatno, seekg() može dovesti do rizika mijenjanja objekta toka u višenitnom okruženju, što zahtijeva oprez i implementaciju mehanizama sinkronizacije za ublažavanje potencijalnih izmjena objekta 'ofstream'.

Primjer 1: Osnove Seekg()

U prvom primjeru objasnit ćemo osnove funkcije seekg() u C++. Kôd C++ programa je dan u nastavku. Prvo ga pogledajte, a zatim ćemo prijeći na objašnjenje svakog dijela koda.



#include

#include

koristeći prostor imena std ;

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

fstream sgFile ( 'seekFile.txt' , ios :: u | ios :: van | ios :: deblo ) ;

sgFile << 'seekg() funkcija' ;

sgFile. tražiti ( 8 , ios :: moliti ) ;

char sgArray [ 8 ] ;

sgFile. čitati ( sgArray , 8 ) ;

sgArray [ 8 ] = 0 ;

cout << sgArray << endl ;

sgFile. Zatvoriti ( ) ;

}

Program uključuje dvije potrebne datoteke zaglavlja – i – za rukovanje datotekama i ulazno/izlazne operacije. Nakon toga, 'using namespace std;' izjava je uključena, dopuštajući standardne C++ identifikatore bez eksplicitnog navođenja imenskog prostora. Na kraju počinje glavna funkcija, koja je ulazna točka programa, uzimajući argumente naredbenog retka (argc i argv).

fstream sgFile(“seekgFile.txt”, ios::in | ios::out | ios::trunk); – Ovdje se stvara “sgFile”, objekt klase “fstream”, koji predstavlja tok datoteke. Datoteka pod nazivom “seekgFile.txt” povezana je s tokom datoteka. Tok datoteke je otvoren za ulaz (ios::in) izlaz (ios::out). Ako datoteka postoji, njen sadržaj je skraćen (ios::trunc).

sgFile << “seekg() funkcija”; – Niz funkcije “seekg()” zapisuje se u datoteku pomoću operatora “<<”.

sgFile.seekg(8, ios::beg); – Funkcija seekg() koristi se za postavljanje pokazivača get na 8. mjesto od početka (ios::beg) datoteke.

sgFile.read(sgArray, 8); – Funkcija 'read' koristi se za čitanje osam znakova iz trenutne pozicije pokazivača get u 'sgArray'.

sgArray[8] = 0; – Null prekida niz znakova kako bi se osiguralo pravilno rukovanje nizom.

cout << sgArray << endl; – Sadržaj 'sgArray' (8 znakova pročitanih iz datoteke) prikazuje se na konzoli koristeći cout.

sgFile.close(); – Funkcija close() koristi se za zatvaranje toka datoteke.

Očekuje se da će izlaz ovog programa biti 'funkcija'. Provjerimo to u sljedećem izlaznom isječku:

Kod stvara tok datoteke koji je pridružen datoteci 'seekgFile.txt', upisuje niz u datoteku, traži osmo mjesto od početka, čita osam znakova i ispisuje pročitani sadržaj. Konačno, tok datoteke je zatvoren.

Primjer 2: Dinamička navigacija

Razmotrite scenarij u kojem morate dinamički izračunati pomak seekg(). Razmotrimo kako dinamički izračunati pomak uz pomoć primjera koda.

#include

#include

koristeći prostor imena std ;

int glavni ( ) {

ifstream sgFile ( 'seekFile.txt' ) ;

int pomaknuti = 8 ;

sgFile. tražiti ( pomaknuti , ios :: staviti ) ;

char pufer [ 8 ] ;

sgFile. čitati ( pufer , 8 ) ;

cout << 'Sadržaj: ' << pufer << endl ;

sgFile. Zatvoriti ( ) ;

povratak 0 ;

}

Kao što vidite, čitamo sadržaj iz iste datoteke koju smo stvorili u prethodnom primjeru, 'seekgFile.txt'. Funkcija seekg() postavlja pokazivač get na trenutnu poziciju (ios::cur) u datoteci i pomiče se za izračunati pomak (8 znakova). Funkcija read() čita osam znakova s ​​trenutne pozicije pokazivača get u međuspremnik.

S obzirom na sadržaj datoteke “seekg() function” i pomak od osam znakova, program će ispisati podniz koji počinje od 9. znaka datoteke. Stoga je očekivani rezultat programa 'funkcija'. Potvrdimo to u sljedećem danom izlazu:

Ovaj primjer pokazuje fleksibilnost seekg() dinamičkim izračunavanjem pomaka.

Primjer 3: Navigacija od kraja

U ovom primjeru pokazat ćemo kako čitati podatke u datoteci s kraja datoteke. Ovdje se seekg() koristi za navigaciju od kraja datoteke. Negativni pomak označava položaj koji je relativan u odnosu na kraj. Pogledajte sljedeći navedeni kod:

#include

#include

koristeći prostor imena std ;

int glavni ( ) {

ifstream sgFile ( 'seekFile.txt' ) ;

sgFile. tražiti ( - 4 , ios :: kraj ) ;

char pufer [ 8 ] ;

sgFile. čitati ( pufer , 8 ) ;

cout << 'Sadržaj: ' << pufer << endl ;

sgFile. Zatvoriti ( ) ;

povratak 0 ;

}

Ovaj C++ program otvara datoteku pod nazivom 'seekgFile.txt' koja pomiče pokazivač za dobivanje četiri znaka unatrag od kraja datoteke pomoću sgFile.seekg(-4, ios::end), čita sljedećih osam znakova s ​​te pozicije u međuspremnik, a zatim ispisuje sadržaj međuspremnika na konzolu. S obzirom na sadržaj datoteke kao 'seekg() funkcija', očekivani izlaz je 'ction'. Usporedimo izlaz na snimci zaslona sljedećeg izlaza:

Zaključak

Ukratko, seekg() se pojavljuje kao dragocjeno sredstvo za precizno kretanje kroz tokove datoteka. Svojom sposobnošću traženja proizvoljnih pozicija, dinamičkog izračunavanja pomaka i kretanja s različitih točaka unutar datoteke, seekg() omogućuje programerima da učinkovito rukuju operacijama datoteke. Kao što smo vidjeli u primjerima, ovladavanje seekg() poboljšava vašu kontrolu i fleksibilnost pri radu s tokovima datoteka u C++. Međutim, zahtijeva pažljivo razmatranje rukovanja iznimkama i mogućih scenarija utrke podataka kako bi se osigurale robusne operacije datoteka bez grešaka u C++-u.