Funkcia Seekg() v C++

Funkcia Seekg V C



V programovaní v C++ funkcia seekg() poskytuje pomoc v rámci tokov súborov. Je členom knižnice iostream a nájdete ho v hlavičke . Táto funkcia umožňuje programátorom manipulovať, kde začína ďalšia vstupná operácia, čím sa zjednodušuje pracovný proces so súbormi. Metóda seekg() vám umožňuje preskočiť na konkrétne miesto v súbore, čo je neoceniteľné, keď potrebujete prečítať alebo spracovať údaje, ktoré nie sú usporiadané postupne. Či už chcete čítať od začiatku, od stredu alebo od konca súboru, seekg() poskytuje flexibilitu, ktorá je potrebná pre takéto úlohy. V tejto príručke sa budeme ponoriť do toho, ako funkcie seekg() v C++ umožňujú získavanie údajov z rôznych miest v súbore.

Syntax a parametre funkcie Seekg() v C++

Seekg() možno implementovať pomocou dvoch syntaxí:

1. Syntax Streampos

Prúd & hľadať ( streampos príspevok ) ;

Táto syntax má iba jeden parameter, pozíciu, ktorý predstavuje pozíciu kurzora vo vyrovnávacej pamäti toku. Predstavuje hodnotu „int“ a typu streampos.







2. Syntax odsadenia a smeru

Prúd & hľadať ( prúdiť často , ios_base :: hľadať je špina ) ;

Táto syntax má ako vstup dva parametre: offset a smer. Parameter „ofst“ je celé číslo typu streamoff, ktoré označuje posun vo vyrovnávacej pamäti streamu. Parameter „nečistota“ hľadá smer.



  • ios_base::beg: Posun od úplného začiatku vyrovnávacej pamäte streamu.
  • ios_base::cur: Posun od aktuálnej pozície vo vyrovnávacej pamäti streamu.
  • ios_base::end: Posun od poslednej vyrovnávacej pamäte streamu.

Funkcia seekg() v C++ manipuluje s ukazovateľom súboru a umožňuje programátorovi umiestniť ho na konkrétne miesto v súbore. Vráti modifikáciu objektu „istream“ (*this) a podľa toho upraví ukazovateľ súboru.



Spracovanie chýb a výnimiek vo funkcii Seekg() v C++

Funkcia seekg() v C++ zaisťuje základnú záruku spracovania výnimiek, pričom zachováva platnosť objektu, ak sa vyskytne výnimka. Môže vyvolať výnimky „zlyhanie“, keď v príznaku chybového stavu chýbajú informácie a funkcia tieto výnimky zodpovedne zachytí a spravuje, pričom ich vyhodí, ak bol v poslednom volaní nastavený zlý bit.





Okrem toho sa bežný problém s seekg() vyskytuje, keď dosiahne koniec súboru (EOF), čo spôsobí, že ukazovateľ zostane nenastavený a spustí sa chyba. Metóda clear() sa používa na resetovanie ukazovateľa a vyriešenie chýb súvisiacich s EOF. Okrem toho môže seeg() riskovať zmenu objektu streamu vo viacvláknovom prostredí, čo si vyžaduje opatrnosť a implementáciu synchronizačných mechanizmov na zmiernenie potenciálnych zmien objektu „ofstream“.

Príklad 1: Základy Seekg()

V prvom príklade si vysvetlíme základy funkcie seekg() v C++. Kód programu C++ je uvedený nižšie. Najprv si ho pozrite a potom prejdeme k vysvetleniu každej časti kódu.



#include

#include

pomocou menného priestoru std ;

int Hlavná ( int argc , char ** argv ) {

fstream sgFile ( 'seekgFile.txt' , ios :: v | ios :: von | ios :: kmeň ) ;

sgFile << 'funkcia seekg()' ;

sgFile. hľadať ( 8 , ios :: prosiť ) ;

char sgArray [ 8 ] ;

sgFile. čítať ( sgArray , 8 ) ;

sgArray [ 8 ] = 0 ;

cout << sgArray << endl ;

sgFile. Zavrieť ( ) ;

}

Program obsahuje dva potrebné hlavičkové súbory – a – pre manipuláciu so súbormi a vstupné/výstupné operácie. Potom „použitie menného priestoru std;“ Zahrnuté je aj vyhlásenie, ktoré umožňuje štandardné identifikátory C++ bez explicitného určenia priestoru názvov. Nakoniec začne hlavná funkcia, ktorá je vstupným bodom programu, pričom preberá argumenty príkazového riadku (argc a argv).

fstream sgFile(“seekgFile.txt”, ios::in | ios::out | ios::trunk); – Tu sa vytvorí „sgFile“, objekt triedy „fstream“, ktorý predstavuje prúd súborov. Súbor s názvom „seekgFile.txt“ je spojený s prúdom súborov. Prúd súboru sa otvorí pre vstup (ios::in) výstup (ios::out). Ak súbor existuje, jeho obsah sa skráti (ios::trunc).

sgFile << “funkcia seekg()”; – Reťazec „seekg() function“ sa zapíše do súboru pomocou operátora „<<“.

sgFile.seekg(8, ios::beg); – Funkcia seekg() sa používa na nastavenie ukazovateľa get na 8. pozíciu od začiatku (ios::beg) súboru.

sgFile.read(sgArray, 8); – Funkcia „read“ sa používa na prečítanie ôsmich znakov z aktuálnej pozície ukazovateľa get do „sgArray“.

sgArray[8] = 0; – Null ukončí pole znakov, aby sa zabezpečilo správne spracovanie reťazca.

cout << sgArray << endl; – Obsah „sgArray“ (8 znakov načítaných zo súboru) sa zobrazí na konzole pomocou cout.

sgFile.close(); – Funkcia close() sa používa na zatvorenie toku súborov.

Očakáva sa, že výstup tohto programu bude „funkcia“. Pozrime sa na to v nasledujúcom výstupnom úryvku:

Kód vytvorí prúd súboru, ktorý je spojený so súborom „seekgFile.txt“, zapíše reťazec do súboru, vyhľadá 8. pozíciu od začiatku, prečíta osem znakov a na výstup vypíše prečítaný obsah. Nakoniec sa tok súborov uzavrie.

Príklad 2: Dynamická navigácia

Zvážte scenár, v ktorom musíte dynamicky vypočítať offset seekg(). Poďme pochopiť, ako dynamicky vypočítať posun pomocou príkladu kódu.

#include

#include

pomocou menného priestoru std ;

int Hlavná ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

int offset = 8 ;

sgFile. hľadať ( offset , ios :: dať ) ;

char vyrovnávacej pamäte [ 8 ] ;

sgFile. čítať ( vyrovnávacej pamäte , 8 ) ;

cout << 'Obsah: ' << vyrovnávacej pamäte << endl ;

sgFile. Zavrieť ( ) ;

vrátiť 0 ;

}

Ako vidíte, čítame obsah z rovnakého súboru, ktorý sme vytvorili v predchádzajúcom príklade „seekgFile.txt“. Funkcia seekg() nastaví ukazovateľ get na aktuálnu pozíciu (ios::cur) v súbore a posunie sa o vypočítaný posun (8 znakov). Funkcia read() načíta osem znakov z aktuálnej pozície ukazovateľa get do vyrovnávacej pamäte.

Vzhľadom na obsah súboru „seekg() function“ a posun ôsmich znakov program vypíše podreťazec, ktorý začína 9. znakom súboru. Preto očakávaným výsledkom programu je „funkcia“. Potvrdíme to v nasledujúcom danom výstupe:

Tento príklad demonštruje flexibilitu funkcie seekg() dynamickým výpočtom posunu.

Príklad 3: Navigácia z konca

V tomto príklade si ukážeme, ako čítať dáta v súbore od konca súboru. Tu sa seekg() používa na navigáciu od konca súboru. Záporný posun označuje polohu, ktorá je vzhľadom na koniec. Pozrite si nasledujúci daný kód:

#include

#include

pomocou menného priestoru std ;

int Hlavná ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

sgFile. hľadať ( - 4 , ios :: koniec ) ;

char vyrovnávacej pamäte [ 8 ] ;

sgFile. čítať ( vyrovnávacej pamäte , 8 ) ;

cout << 'Obsah: ' << vyrovnávacej pamäte << endl ;

sgFile. Zavrieť ( ) ;

vrátiť 0 ;

}

Tento C++ program otvorí súbor s názvom „seekgFile.txt“, ktorý posunie ukazovateľ get o štyri znaky dozadu od konca súboru pomocou sgFile.seekg(-4, ios::end), načíta ďalších osem znakov z tejto pozície do vyrovnávaciu pamäť a potom vytlačí obsah vyrovnávacej pamäte do konzoly. Vzhľadom na obsah súboru ako funkcia „seekg()“ je očakávaným výstupom „ction“. Porovnajme výstup na snímke obrazovky s nasledujúcim výstupom:

Záver

Stručne povedané, seekg() sa javí ako cenný prínos pre presnú navigáciu v súboroch. Vďaka svojej schopnosti vyhľadávať ľubovoľné pozície, dynamicky vypočítať odchýlky a navigovať z rôznych bodov v súbore umožňuje seekg() vývojárom efektívne zvládnuť operácie so súbormi. Ako sme videli v príkladoch, zvládnutie funkcie seekg() zvyšuje vašu kontrolu a flexibilitu pri práci so súbormi v C++. Vyžaduje si to však starostlivé zváženie spracovania výnimiek a potenciálnych scenárov pretekov s údajmi, aby sa zabezpečili robustné a bezchybné operácie so súbormi v C++.