Funkce Seekg() v C++

Funkce Seekg V C



V programování v C++ poskytuje funkce seekg() nápovědu v rámci souborových proudů. Je členem knihovny iostream a najdete ho v záhlaví . Tato funkce umožňuje programátorům manipulovat s tím, kde začíná další vstupní operace, čímž se zjednodušuje pracovní proces se soubory. Metoda seekg() vám umožňuje přeskočit na konkrétní místo v souboru, což je neocenitelné, když potřebujete číst nebo zpracovávat data, která nejsou sekvenčně organizována. Ať už chcete číst od začátku, od středu nebo od konce souboru, seekg() poskytuje flexibilitu, která je pro takové úkoly vyžadována. V této příručce se ponoříme do toho, jak funkce seekg() v C++ umožňují načítání dat z různých míst v souboru.

Syntaxe a parametry funkce Seekg() v C++

Seekg() lze implementovat pomocí dvou syntaxí:

1. Syntaxe Streampos

proud & hledat ( příspěvek streampos ) ;

Tato syntaxe přebírá pouze jeden parametr, position, který představuje pozici kurzoru ve vyrovnávací paměti proudu. Představuje hodnotu „int“ a typu streampos.







2. Syntaxe offsetu a směru

proud & hledat ( proudit často , ios_base :: hledat je špína ) ;

Tato syntaxe má jako vstup dva parametry: offset a směr. Parametr „ofst“ je celé číslo typu streamoff, které označuje posun ve vyrovnávací paměti streamu. Parametr „nečistota“ hledá směr.



  • ios_base::beg: Posun od samého začátku vyrovnávací paměti streamu.
  • ios_base::cur: Odsazení od aktuální pozice ve vyrovnávací paměti streamu.
  • ios_base::end: Posun od poslední vyrovnávací paměti streamu.

Funkce seekg() v C++ manipuluje s ukazatelem souboru a umožňuje programátorovi umístit jej na konkrétní místo v souboru. Vrátí modifikaci objektu „istream“ (*this) a podle toho upraví ukazatel souboru.



Zpracování chyb a výjimek ve funkci Seekg() v jazyce C++

Funkce seekg() v C++ zajišťuje základní záruku pro zpracování výjimek, zachování platnosti objektu, pokud dojde k výjimce. Může vyvolat výjimky „selhání“, když příznak chybového stavu postrádá informace, a funkce tyto výjimky zodpovědně zachytí a spravuje a znovu je vyhodí, pokud byl v posledním volání nastaven špatný bit.





Navíc k běžnému problému se seekg() dochází, když dosáhne konce souboru (EOF), což způsobí, že ukazatel zůstane nenastavený a spustí se chyba. Metoda clear() se používá k resetování ukazatele a vyřešení chyb souvisejících s EOF. Kromě toho může seekg() riskovat změnu objektu streamu v prostředí s více vlákny, což vyžaduje opatrnost a implementaci synchronizačních mechanismů ke zmírnění potenciálních změn objektu „ofstream“.

Příklad 1: Základy Seekg()

V prvním příkladu si vysvětlíme základy funkce seekg() v C++. Kód programu v C++ je uveden níže. Nejprve se na to podívejte a poté přejdeme k vysvětlení každé části kódu.



#include

#include

pomocí jmenného prostoru std ;

int hlavní ( int argc , char ** argv ) {

fstream sgFile ( 'seekgFile.txt' , ios :: v | ios :: ven | ios :: kmen ) ;

sgFile << 'funkce seekg()' ;

sgFile. hledat ( 8 , ios :: žebrat ) ;

char sgArray [ 8 ] ;

sgFile. číst ( sgArray , 8 ) ;

sgArray [ 8 ] = 0 ;

cout << sgArray << endl ;

sgFile. zavřít ( ) ;

}

Program obsahuje dva potřebné hlavičkové soubory – a – pro manipulaci se soubory a vstupně/výstupní operace. Poté „použití jmenného prostoru std;“ je zahrnut, což umožňuje standardní identifikátory C++ bez explicitního určení jmenného prostoru. Nakonec začíná hlavní funkce, která je vstupním bodem programu a přebírá argumenty příkazového řádku (argc a argv).

fstream sgFile(“seekgFile.txt”, ios::in | ios::out | ios::trunk); – Zde se vytvoří „sgFile“, objekt třídy „fstream“, představující souborový proud. Soubor s názvem „seekgFile.txt“ je přidružen k datovému proudu souboru. Tok souboru je otevřen pro vstup (ios::in) výstup (ios::out). Pokud soubor existuje, jeho obsah je zkrácen (ios::trunc).

sgFile << “funkce seekg()”; – Řetězec “seekg() function” je zapsán do souboru pomocí operátoru “<<”.

sgFile.seekg(8, ios::beg); – Funkce seekg() se používá k nastavení ukazatele get na 8. pozici od začátku (ios::beg) souboru.

sgFile.read(sgArray, 8); – Funkce „read“ se používá k načtení osmi znaků z aktuální pozice get pointeru do „sgArray“.

sgArray[8] = 0; – Null ukončí pole znaků, aby bylo zajištěno správné zpracování řetězce.

cout << sgArray << endl; – Obsah „sgArray“ (8 znaků načtených ze souboru) se zobrazí na konzole pomocí cout.

sgFile.close(); – Funkce close() se používá k uzavření toku souborů.

Očekává se, že výstupem tohoto programu bude „funkce“. Pojďme to zkontrolovat v následujícím úryvku výstupu:

Kód vytvoří souborový proud, který je přidružen k souboru „seekgFile.txt“, zapíše do souboru řetězec, vyhledá 8. pozici od začátku, přečte osm znaků a odešle přečtený obsah. Nakonec je datový proud souborů uzavřen.

Příklad 2: Dynamická navigace

Zvažte scénář, kde musíte dynamicky vypočítat offset seekg(). Pojďme pochopit, jak dynamicky vypočítat offset pomocí příkladu kódu.

#include

#include

pomocí jmenného prostoru std ;

int hlavní ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

int offset = 8 ;

sgFile. hledat ( offset , ios :: dát ) ;

char vyrovnávací paměť [ 8 ] ;

sgFile. číst ( vyrovnávací paměť , 8 ) ;

cout << 'Obsah: ' << vyrovnávací paměť << endl ;

sgFile. zavřít ( ) ;

vrátit se 0 ;

}

Jak vidíte, čteme obsah ze stejného souboru, který jsme vytvořili v předchozím příkladu, „seekgFile.txt“. Funkce seekg() nastaví ukazatel get na aktuální pozici (ios::cur) v souboru a posune se o vypočítaný offset (8 znaků). Funkce read() načte osm znaků z aktuální pozice ukazatele get do vyrovnávací paměti.

Vzhledem k obsahu souboru „seekg() function“ a offsetu osmi znaků program vypíše podřetězec, který začíná 9. znakem souboru. Očekávaným výsledkem programu je tedy „funkce“. Potvrdíme to v následujícím daném výstupu:

Tento příklad demonstruje flexibilitu seekg() dynamickým výpočtem offsetu.

Příklad 3: Navigace od konce

V tomto příkladu si ukážeme, jak číst data v souboru od konce souboru. Seeg() se zde používá k navigaci od konce souboru. Záporný offset označuje pozici, která je vzhledem ke konci. Viz následující daný kód:

#include

#include

pomocí jmenného prostoru std ;

int hlavní ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

sgFile. hledat ( - 4 , ios :: konec ) ;

char vyrovnávací paměť [ 8 ] ;

sgFile. číst ( vyrovnávací paměť , 8 ) ;

cout << 'Obsah: ' << vyrovnávací paměť << endl ;

sgFile. zavřít ( ) ;

vrátit se 0 ;

}

Tento C++ program otevře soubor s názvem „seekgFile.txt“, který přesune ukazatel get o čtyři znaky zpět od konce souboru pomocí sgFile.seekg(-4, ios::end), přečte dalších osm znaků z této pozice do vyrovnávací paměti a poté vytiskne obsah vyrovnávací paměti do konzoly. Vzhledem k obsahu souboru jako funkce „seekg()“ je očekávaným výstupem „ction“. Porovnejme výstup na snímku obrazovky s následujícím výstupem:

Závěr

Stručně řečeno, seekg() se ukazuje jako cenný přínos pro přesné procházení proudů souborů. Díky své schopnosti vyhledávat libovolné pozice, dynamicky počítat offsety a navigovat z různých bodů v souboru, umožňuje seekg() vývojářům efektivně zpracovávat operace se soubory. Jak jsme viděli v příkladech, zvládnutí seekg() zvyšuje vaši kontrolu a flexibilitu při práci se souborovými proudy v C++. Vyžaduje však pečlivé zvážení zpracování výjimek a potenciálních scénářů závodů s daty, aby byly zajištěny robustní a bezchybné operace se soubory v C++.