Funcția C++ Seekg().

Functia C Seekg



În programarea C++, funcția seekg() oferă ajutor în fluxurile de fișiere. Este membru al bibliotecii iostream și îl veți găsi în antetul . Această funcție permite programatorilor să manipuleze locul în care începe următoarea operație de introducere, simplificând astfel procesul de lucru cu fișiere. Metoda seekg() vă permite să săriți într-o locație specifică dintr-un fișier, care este neprețuită atunci când trebuie să citiți sau să procesați datele care nu sunt organizate secvenţial. Indiferent dacă doriți să citiți de la începutul, mijlocul sau sfârșitul unui fișier, seekg() oferă flexibilitatea necesară pentru astfel de sarcini. Pe parcursul acestui ghid, vom explora modul în care funcțiile seekg() în C++ permit regăsirea datelor din diferite puncte dintr-un fișier.

Sintaxa și parametrii funcției Seekg() în C++

Seekg() poate fi implementat cu două sintaxe:

1. Sintaxa Streampos

curent & seekg ( streampos post ) ;

Această sintaxă ia doar un parametru, poziție, care reprezintă poziția cursorului în bufferul de flux. Reprezintă o valoare „int” și de tip streampos.







2. Offset și Sintaxa Direcției

curent & seekg ( curge des , ios_base :: cauta este murdărie ) ;

Această sintaxă ia doi parametri ca intrare: offset și direcție. Parametrul „ofst” este un întreg de tip streamoff care indică offset-ul din buffer-ul fluxului. Parametrul „murdărie” caută direcția.



  • ios_base::beg: Offset de la începutul buffer-ului fluxului.
  • ios_base::cur: Decalaj față de poziția curentă în buffer-ul fluxului.
  • ios_base::end: Decalaj față de ultimul buffer al fluxului.

Funcția seekg() din C++ manipulează indicatorul fișierului, permițând programatorului să-l poziționeze într-o locație specifică din fișier. Returnează modificarea obiectului „istream” (*this) și ajustează indicatorul fișierului în consecință.



Gestionarea erorilor și excepțiilor în funcția C++ Seekg().

Funcția seekg() în C++ asigură garanția de bază pentru gestionarea excepțiilor, menținând valabilitatea obiectului dacă apare o excepție. Poate arunca excepțiile „eșec” atunci când indicatorul de stare de eroare nu are informații, iar funcția prinde și gestionează în mod responsabil aceste excepții, aruncându-le din nou dacă a fost setat un bit rău în ultimul apel.





Mai mult, o problemă comună cu seekg() apare atunci când ajunge la sfârșitul fișierului (EOF), determinând ca indicatorul să rămână nesetat și declanșând o eroare. Metoda clear() este utilizată pentru a reseta indicatorul și pentru a rezolva erorile legate de EOF pentru a rezolva acest lucru. În plus, seekg() poate risca să modifice un obiect flux într-un mediu cu mai multe fire, necesitând prudență și implementarea mecanismelor de sincronizare pentru a atenua potențialele modificări ale obiectului „ofstream”.

Exemplul 1: Elementele de bază ale Seekg()

În primul exemplu, vom explica elementele de bază ale funcției seekg() în C++. Codul unui program C++ este dat în cele ce urmează. Aruncă o privire mai întâi la el și apoi vom trece la explicația fiecărei secțiuni a codului.



#include

#include

folosind namespace std ;

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

fstream sgFile ( „seekgFile.txt” , ios :: în | ios :: afară | ios :: trompă ) ;

sgFile << 'funcția seekg()' ;

sgFile. seekg ( 8 , ios :: implora ) ;

char sgArray [ 8 ] ;

sgFile. citit ( sgArray , 8 ) ;

sgArray [ 8 ] = 0 ;

cout << sgArray << endl ;

sgFile. închide ( ) ;

}

Programul include două fișiere de antet necesare – și – pentru manipularea fișierelor și, respectiv, operațiuni de intrare/ieșire. Apoi, „utilizarea spațiului de nume std;” este inclusă instrucțiunea, permițând identificatorii standard C++ fără a specifica spațiul de nume în mod explicit. În cele din urmă, începe funcția principală, care este punctul de intrare al programului, luând argumentele liniei de comandă (argc și argv).

fstream sgFile(„seekgFile.txt”, ios::in | ios::out | ios::trunk); – Aici este creat „sgFile”, un obiect al clasei „fstream”, reprezentând un flux de fișiere. Fișierul numit „seekgFile.txt” este asociat cu fluxul de fișiere. Fluxul de fișiere este deschis pentru intrare (ios::in) ieșire (ios::out). Dacă fișierul există, conținutul său este trunchiat (ios::trunc).

sgFile << „funcția seekg()”; – Șirul „seekg() function” este scris în fișier folosind operatorul „<<”.

sgFile.seekg(8, ios::beg); – Funcția seekg() este folosită pentru a seta indicatorul de obținere la a 8-a poziție de la începutul (ios::beg) a fișierului.

sgFile.read(sgArray, 8); – Funcția „citire” este folosită pentru a citi opt caractere din poziția curentă a pointerului de obținere în „sgArray”.

sgArray[8] = 0; – Null termină matricea de caractere pentru a asigura o gestionare adecvată a șirurilor.

cout << sgArray << endl; – Conținutul „sgArray” (cele 8 caractere citite din fișier) este afișat pe consolă folosind cout.

sgFile.close(); – Funcția close() este folosită pentru a închide fluxul de fișiere.

Rezultatul acestui program este de așteptat să fie „funcție”. Să o verificăm în următorul fragment de ieșire:

Codul creează un flux de fișiere care este asociat cu fișierul „seekgFile.txt” scrie un șir în fișier, caută poziția a 8-a de la început, citește opt caractere și scoate conținutul citit. În cele din urmă, fluxul de fișiere este închis.

Exemplul 2: Navigare dinamică

Luați în considerare un scenariu în care trebuie să calculați dinamic offset-ul seekg(). Să înțelegem cum să calculăm dinamic offset-ul cu ajutorul unui exemplu de cod.

#include

#include

folosind namespace std ;

int principal ( ) {

ifstream sgFile ( „seekgFile.txt” ) ;

int decalaj = 8 ;

sgFile. seekg ( decalaj , ios :: a pune ) ;

char tampon [ 8 ] ;

sgFile. citit ( tampon , 8 ) ;

cout << „Conținut:” << tampon << endl ;

sgFile. închide ( ) ;

întoarcere 0 ;

}

După cum puteți vedea, citim conținutul din același fișier pe care l-am creat în exemplul anterior, „seekgFile.txt”. Funcția seekg() setează indicatorul get la poziția curentă (ios::cur) în fișier și este mutat de offset-ul calculat (8 caractere). Funcția read() citește opt caractere din poziția curentă a pointerului get în buffer.

Având în vedere conținutul fișierului „seekg() function” și offset-ul de opt caractere, programul va scoate subșirul care începe de la al 9-lea caracter al fișierului. Prin urmare, rezultatul așteptat al programului este „funcție”. Să confirmăm acest lucru în următorul rezultat dat:

Acest exemplu demonstrează flexibilitatea seekg() prin calcularea dinamică a offset-ului.

Exemplul 3: Navigarea de la sfârșit

În acest exemplu, vom demonstra cum să citiți datele dintr-un fișier de la sfârșitul fișierului. Aici, seekg() este folosit pentru a naviga de la sfârșitul fișierului. Decalajul negativ indică o poziție relativă la capăt. Vedeți următorul cod dat:

#include

#include

folosind namespace std ;

int principal ( ) {

ifstream sgFile ( „seekgFile.txt” ) ;

sgFile. seekg ( - 4 , ios :: Sfârşit ) ;

char tampon [ 8 ] ;

sgFile. citit ( tampon , 8 ) ;

cout << „Conținut:” << tampon << endl ;

sgFile. închide ( ) ;

întoarcere 0 ;

}

Acest program C++ deschide un fișier numit „seekgFile.txt” care mută indicatorul de obținere de patru caractere înapoi de la sfârșitul fișierului folosind sgFile.seekg(-4, ios::end), citește următoarele opt caractere din acea poziție în un buffer, apoi imprimă conținutul buffer-ului pe consolă. Având în vedere conținutul fișierului ca „funcție seekg()”, rezultatul așteptat este „ction”. Să potrivim rezultatul din captura de ecran a următoarei rezultate:

Concluzie

În rezumat, seekg() apare ca un activ valoros pentru navigarea cu precizie în fluxurile de fișiere. Prin capacitatea sa de a căuta poziții arbitrare, de a calcula dinamic offset-urile și de a naviga din diferite puncte dintr-un fișier, seekg() dă putere dezvoltatorilor să gestioneze eficient operațiunile fișierului. După cum am văzut în exemple, stăpânirea seekg() vă îmbunătățește controlul și flexibilitatea atunci când lucrați cu fluxuri de fișiere în C++. Cu toate acestea, necesită o analiză atentă a gestionării excepțiilor și a potențialelor scenarii de cursă de date pentru a asigura operațiunile cu fișiere robuste și fără erori în C++.