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