C++ Seekg() függvény

C Seekg Fuggveny



A C++ programozásban a seekg() függvény nyújt segítséget a fájlfolyamokon belül. Ez az iostream könyvtár tagja, és az fejlécben található. Ez a funkció lehetővé teszi a programozók számára, hogy módosítsák, hol kezdődjön a következő beviteli művelet, ezáltal leegyszerűsítve a fájlokkal végzett munkafolyamatot. A seekg() metódus lehetővé teszi, hogy egy adott helyre ugorjon a fájlban, ami felbecsülhetetlen értékű, ha olyan adatokat kell olvasnia vagy feldolgoznia, amelyek nincsenek sorrendben rendezve. Akár egy fájl elejétől, közepétől vagy végétől kíván olvasni, a seekg() biztosítja az ilyen feladatokhoz szükséges rugalmasságot. Ebben az útmutatóban megvizsgáljuk, hogy a C++ seekg() függvényei hogyan teszik lehetővé az adatok lekérését a fájl különböző pontjairól.

A Seekg() függvény szintaxisa és paraméterei C++ nyelven

A Seekg() két szintaxissal valósítható meg:

1. Streampos szintaxis

folyam & seekg ( streampos post ) ;

Ez a szintaxis csak egy paramétert vesz fel, a pozíciót, amely a kurzor pozícióját jelenti a stream pufferben. Ez egy „int” értéket képvisel, és streampos típusú.







2. Eltolás és irány szintaxis

folyam & seekg ( patak le gyakran , ios_base :: keresni az piszok ) ;

Ez a szintaxis két paramétert használ bemenetként: az eltolást és az irányt. Az „ofst” paraméter egy streamoff típusú egész szám, amely jelzi az eltolást az adatfolyam pufferében. A „dirt” paraméter irányt keres.



  • ios_base::beg: Eltolás az adatfolyam pufferének legelejétől.
  • ios_base::cur: Eltolás az adatfolyam pufferében lévő aktuális pozícióhoz képest.
  • ios_base::end: Eltolás az adatfolyam utolsó pufferéhez képest.

A seekg() függvény a C++-ban manipulálja a fájlmutatót, lehetővé téve a programozó számára, hogy azt a fájl egy meghatározott helyére helyezze. Visszaadja az „istream” objektum módosítását (*this), és ennek megfelelően állítja be a fájlmutatót.



Hiba- és kivételkezelés a C++ Seekg() függvényben

A seekg() függvény a C++-ban alapvető garanciát nyújt a kivételkezeléshez, fenntartva az objektum érvényességét, ha kivétel történik. A „hiba” kivételeket akkor dobhatja ki, ha a hibaállapot jelzője nem rendelkezik információval, és a funkció felelősségteljesen felfogja és kezeli ezeket a kivételeket, és visszadobja őket, ha az utolsó hívásban rossz bitet állítottak be.





Ezenkívül a seekg() gyakori probléma akkor fordul elő, amikor eléri a fájl végét (EOF), ami miatt a mutató beállítatlan marad, és hibát okoz. A clear() metódus a mutató alaphelyzetbe állítására és az EOF-vel kapcsolatos hibák megoldására szolgál. Ezenkívül a seekg() azt kockáztathatja, hogy többszálú környezetben módosítson egy adatfolyam-objektumot, ami óvatosságot és szinkronizálási mechanizmusok megvalósítását teszi szükségessé az esetleges „folyamon kívüli” objektumváltozások mérséklése érdekében.

1. példa: A Seekg() alapjai

Az első példában elmagyarázzuk a seekg() függvény alapjait C++ nyelven. Egy C++ program kódját a következőkben adjuk meg. Először nézze meg, majd folytatja a kód egyes szakaszainak magyarázatát.



#include

#include

névtér std használatával ;

int fő- ( int argc , char ** argv ) {

fstream sgFile ( 'seekgFile.txt' , ios :: ban ben | ios :: ki | ios :: törzs ) ;

sgFile << 'seekg() függvény' ;

sgFile. seekg ( 8 , ios :: könyörög ) ;

char sgArray [ 8 ] ;

sgFile. olvas ( sgArray , 8 ) ;

sgArray [ 8 ] = 0 ;

cout << sgArray << endl ;

sgFile. Bezárás ( ) ;

}

A program két szükséges fejlécfájlt tartalmaz – és – a fájlkezeléshez, illetve az input/output műveletekhez. Ezt követően a „using namespace std;” utasítás szerepel, amely lehetővé teszi a szabványos C++ azonosítók használatát anélkül, hogy a névteret kifejezetten megadná. Végül a fő függvény kezdődik, amely a program belépési pontja, és a parancssori argumentumokat veszi át (argc és argv).

fstream sgFile(“seekgFile.txt”, ios::in | ios::out | ios::trunk); – Itt jön létre az „sgFile”, az „fstream” osztály egyik objektuma, amely egy fájlfolyamot képvisel. A „seekgFile.txt” nevű fájl a fájlfolyamhoz van társítva. A fájlfolyam megnyílik a bemeneti (ios::in) kimenethez (ios::out). Ha a fájl létezik, akkor annak tartalma csonkolva lesz (ios::trunc).

sgFile << “seekg() függvény”; – A „seekg() függvény” karakterlánc a „<<” operátor használatával kerül a fájlba.

sgFile.seekg(8, ios::beg); – A seekg() függvény arra szolgál, hogy a get mutatót a fájl elejétől (ios::beg) a 8. pozícióba állítsa.

sgFile.read(sgArray, 8); – A „read” funkció a get pointer aktuális pozíciójából nyolc karakter beolvasására szolgál az „sgArray”-be.

sgArray[8] = 0; – A nulla leállítja a karaktertömböt, hogy biztosítsa a megfelelő karakterlánckezelést.

cout << sgArray << endl; – Az „sgArray” tartalma (a fájlból kiolvasott 8 karakter) a cout segítségével jelenik meg a konzolon.

sgFile.close(); – A close() függvény a fájlfolyam bezárására szolgál.

Ennek a programnak a kimenete várhatóan „funkció”. Ellenőrizzük a következő kimeneti kódrészletben:

A kód létrehoz egy fájlfolyamot, amely a „seekgFile.txt” fájlhoz van társítva, egy karakterláncot ír a fájlba, megkeresi a 8. pozíciót az elejétől kezdve, beolvas nyolc karaktert, és kiadja az olvasott tartalmat. Végül a fájlfolyam bezárul.

2. példa: Dinamikus navigáció

Vegyünk egy forgatókönyvet, ahol dinamikusan kell kiszámítani a seekg() eltolást. Ismerjük meg, hogyan lehet dinamikusan kiszámítani az eltolást egy kódpélda segítségével.

#include

#include

névtér std használatával ;

int fő- ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

int beszámítás = 8 ;

sgFile. seekg ( beszámítás , ios :: tegye ) ;

char puffer [ 8 ] ;

sgFile. olvas ( puffer , 8 ) ;

cout << 'Tartalom: ' << puffer << endl ;

sgFile. Bezárás ( ) ;

Visszatérés 0 ;

}

Amint láthatja, a tartalmat ugyanabból a fájlból olvassuk, amelyet az előző példában létrehoztunk, „seekgFile.txt”. A seekg() függvény a get mutatót az aktuális pozícióra (ios::cur) állítja be a fájlban, és a számított eltolás (8 karakter) szerint mozog. A read() függvény nyolc karaktert olvas be a get pointer aktuális pozíciójából a pufferbe.

A „seekg() function” fájl tartalmát és a nyolc karakteres eltolást figyelembe véve a program a fájl 9. karakterétől kezdődő részstringet adja ki. Ezért a program várható eredménye a „funkció”. Erősítsük meg a következő megadott kimenetben:

Ez a példa bemutatja a seekg() rugalmasságát az eltolás dinamikus kiszámításával.

3. példa: Navigálás a végéről

Ebben a példában bemutatjuk, hogyan kell a fájlban lévő adatokat a fájl végétől olvasni. Itt a seekg() segítségével lehet navigálni a fájl végétől. A negatív eltolás a véghez viszonyított pozíciót jelöli. Lásd a következő megadott kódot:

#include

#include

névtér std használatával ;

int fő- ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

sgFile. seekg ( - 4 , ios :: vége ) ;

char puffer [ 8 ] ;

sgFile. olvas ( puffer , 8 ) ;

cout << 'Tartalom: ' << puffer << endl ;

sgFile. Bezárás ( ) ;

Visszatérés 0 ;

}

Ez a C++ program megnyit egy „seekgFile.txt” nevű fájlt, amely a négy karakterből álló get mutatót visszafelé mozgatja a fájl végétől az sgFile.seekg(-4, ios::end) segítségével, és beolvassa a következő nyolc karaktert ebből a pozícióból egy puffert, majd kinyomtatja a puffer tartalmát a konzolra. Ha a fájl tartalma „seekg() függvény”, a várt kimenet a „ction”. Párosítsuk a kimenetet a következő kimenet képernyőképen:

Következtetés

Összefoglalva, a seekg() értékes eszköz a fájlfolyamokban való pontos navigáláshoz. Azáltal, hogy képes tetszőleges pozíciókat keresni, dinamikusan számítani az eltolásokat és navigálni a fájl különböző pontjairól, a seekg() felhatalmazza a fejlesztőket a fájlműveletek hatékony kezelésére. Amint azt a példákban láttuk, a seekg() elsajátítása növeli a vezérlést és a rugalmasságot, amikor fájlfolyamokkal dolgozik C++ nyelven. Mindazonáltal megköveteli a kivételkezelés és a lehetséges adatverseny-forgatókönyvek alapos mérlegelését, hogy biztosítsa a robusztus és hibamentes fájlműveleteket C++ nyelven.