C++ Seekg()-Funktion

C Seekg Funktion



Bei der C++-Programmierung bietet die Funktion „seegg()“ Hilfe innerhalb der Dateiströme. Es ist ein Mitglied der iostream-Bibliothek und Sie finden es im -Header. Mit dieser Funktion können Programmierer manipulieren, wo der nächste Eingabevorgang beginnt, und so den Arbeitsprozess mit Dateien rationalisieren. Mit der Methode „seegg()“ können Sie zu einer bestimmten Stelle in einer Datei springen, was von unschätzbarem Wert ist, wenn Sie Daten lesen oder verarbeiten müssen, die nicht sequentiell organisiert sind. Unabhängig davon, ob Sie den Anfang, die Mitte oder das Ende einer Datei lesen möchten, bietet seegg() die Flexibilität, die für solche Aufgaben erforderlich ist. In diesem Handbuch werden wir uns damit befassen, wie die Suchg()-Funktionen in C++ den Datenabruf von verschiedenen Punkten innerhalb einer Datei ermöglichen.

Syntax und Parameter der Seekg()-Funktion in C++

Seekg() kann mit zwei Syntaxen implementiert werden:

1. Streampos-Syntax

Strom & suche ( Streampos-Beitrag ) ;

Diese Syntax benötigt nur einen Parameter, position, der die Position des Cursors im Stream-Puffer darstellt. Es stellt einen „int“-Wert dar und ist vom Typ streampos.







2. Offset- und Richtungssyntax

Strom & suche ( oft abströmen , ios_base :: suchen ist Schmutz ) ;

Diese Syntax benötigt zwei Parameter als Eingabe: Offset und Richtung. Der Parameter „ofst“ ist eine Ganzzahl vom Typ streamoff, die den Offset im Puffer des Streams angibt. Der Parameter „Schmutz“ sucht nach Richtung.



  • ios_base::beg: Offset vom Anfang des Stream-Puffers.
  • ios_base::cur: Offset von der aktuellen Position im Puffer des Streams.
  • ios_base::end: Offset vom letzten Puffer des Streams.

Die Funktion „seegg()“ in C++ manipuliert den Dateizeiger und ermöglicht es dem Programmierer, ihn an einer bestimmten Stelle in der Datei zu positionieren. Es gibt die Änderung des „istream“-Objekts (*this) zurück und passt den Dateizeiger entsprechend an.



Fehler- und Ausnahmebehandlung in der C++-Seekg()-Funktion

Die Funktion „seegg()“ in C++ gewährleistet die grundlegende Garantie für die Ausnahmebehandlung und behält die Objektgültigkeit bei, wenn eine Ausnahme auftritt. Es kann die „Fehler“-Ausnahmen auslösen, wenn dem Fehlerzustandsflag Informationen fehlen, und die Funktion fängt und verwaltet diese Ausnahmen verantwortungsbewusst und löst sie erneut aus, wenn beim letzten Aufruf ein fehlerhaftes Bit gesetzt wurde.





Darüber hinaus tritt bei seeg() ein häufiges Problem auf, wenn das Dateiende (EOF) erreicht wird, wodurch der Zeiger nicht gesetzt bleibt und ein Fehler ausgelöst wird. Die Methode „clear()“ wird verwendet, um den Zeiger zurückzusetzen und die EOF-bezogenen Fehler zu beheben, um dieses Problem zu beheben. Darüber hinaus kann seegg() das Risiko eingehen, ein Stream-Objekt in einer Multithread-Umgebung zu ändern, was Vorsicht und die Implementierung von Synchronisierungsmechanismen erfordert, um die potenziellen „Ofstream“-Objektänderungen abzuschwächen.

Beispiel 1: Grundlagen von Seekg()

Im ersten Beispiel erklären wir die Grundlagen der Funktion seeng() in C++. Im Folgenden wird der Code eines C++-Programms angegeben. Werfen Sie zunächst einen Blick darauf und dann gehen wir zur Erläuterung der einzelnen Abschnitte des Codes über.



#include

#include

Verwenden des Namensraums std ;

int hauptsächlich ( int argc , verkohlen ** argv ) {

fstream sgFile ( „seekgFile.txt“ , ios :: In | ios :: aus | ios :: Stamm ) ;

sgFile << „seekg()-Funktion“ ;

sgFile. suche ( 8 , ios :: bitten ) ;

verkohlen sgArray [ 8 ] ;

sgFile. lesen ( sgArray , 8 ) ;

sgArray [ 8 ] = 0 ;

cout << sgArray << endl ;

sgFile. schließen ( ) ;

}

Das Programm enthält zwei notwendige Header-Dateien – und – für die Dateiverwaltung bzw. Eingabe-/Ausgabevorgänge. Anschließend wird der Befehl „using namespace std;“ angezeigt. Die Anweisung ist enthalten und ermöglicht die Standard-C++-Bezeichner, ohne den Namespace explizit anzugeben. Schließlich beginnt die Hauptfunktion, die den Einstiegspunkt des Programms darstellt und die Befehlszeilenargumente (argc und argv) übernimmt.

fstream sgFile(“seekgFile.txt”, ios::in | ios::out | ios::trunk); – Hier wird das „sgFile“, ein Objekt der Klasse „fstream“, erstellt, das einen Dateistream darstellt. Die Datei mit dem Namen „seekgFile.txt“ ist dem Dateistream zugeordnet. Der Dateistream wird für die Eingabe (ios::in) und die Ausgabe (ios::out) geöffnet. Wenn die Datei vorhanden ist, wird ihr Inhalt abgeschnitten (ios::trunc).

sgFile << „seekg() function“; – Der String „seekg() function“ wird mit dem Operator „<<“ in die Datei geschrieben.

sgFile.seekg(8, ios::beg); – Die Funktion „seegg()“ wird verwendet, um den Get-Zeiger auf die 8. Position vom Anfang (ios::beg) der Datei zu setzen.

sgFile.read(sgArray, 8); – Mit der Funktion „read“ werden acht Zeichen ab der aktuellen Position des Get-Pointers in das „sgArray“ eingelesen.

sgArray[8] = 0; – Null beendet das Zeichenarray, um eine ordnungsgemäße Zeichenfolgenverarbeitung sicherzustellen.

cout << sgArray << endl; – Der Inhalt von „sgArray“ (die 8 aus der Datei gelesenen Zeichen) wird mit cout auf der Konsole angezeigt.

sgFile.close(); – Mit der Funktion close() wird der Dateistream geschlossen.

Die Ausgabe dieses Programms wird voraussichtlich „Funktion“ sein. Lassen Sie es uns im folgenden Ausgabeausschnitt überprüfen:

Der Code erstellt einen Dateistream, der mit der Datei „seekgFile.txt“ verknüpft ist, schreibt einen String in die Datei, sucht die 8. Position von Anfang an, liest acht Zeichen und gibt den gelesenen Inhalt aus. Abschließend wird der Dateistream geschlossen.

Beispiel 2: Dynamische Navigation

Stellen Sie sich ein Szenario vor, in dem Sie den seegg()-Offset dynamisch berechnen müssen. Lassen Sie uns anhand eines Codebeispiels verstehen, wie der Offset dynamisch berechnet wird.

#include

#include

Verwenden des Namensraums std ;

int hauptsächlich ( ) {

ifstream sgFile ( „seekgFile.txt“ ) ;

int versetzt = 8 ;

sgFile. suche ( versetzt , ios :: setzen ) ;

verkohlen Puffer [ 8 ] ;

sgFile. lesen ( Puffer , 8 ) ;

cout << 'Inhalt: ' << Puffer << endl ;

sgFile. schließen ( ) ;

zurückkehren 0 ;

}

Wie Sie sehen, lesen wir den Inhalt aus derselben Datei, die wir im vorherigen Beispiel erstellt haben, „seekgFile.txt“. Die Funktion „seegg()“ setzt den Get-Zeiger auf die aktuelle Position (ios::cur) in der Datei und verschiebt ihn um den berechneten Offset (8 Zeichen). Die Funktion read() liest acht Zeichen ab der aktuellen Position des Get-Zeigers in den Puffer.

Angesichts des Inhalts der Datei „seekg() function“ und des Offsets von acht Zeichen gibt das Programm die Teilzeichenfolge aus, die ab dem 9. Zeichen der Datei beginnt. Daher ist das erwartete Ergebnis des Programms „Funktion“. Lassen Sie es uns in der folgenden Ausgabe bestätigen:

Dieses Beispiel demonstriert die Flexibilität von seegg() durch die dynamische Berechnung des Offsets.

Beispiel 3: Vom Ende aus navigieren

In diesem Beispiel zeigen wir, wie die Daten in einer Datei vom Ende der Datei aus gelesen werden. Hier wird seegg() verwendet, um vom Ende der Datei aus zu navigieren. Der negative Offset gibt eine Position relativ zum Ende an. Siehe den folgenden angegebenen Code:

#include

#include

Verwenden des Namensraums std ;

int hauptsächlich ( ) {

ifstream sgFile ( „seekgFile.txt“ ) ;

sgFile. suche ( - 4 , ios :: Ende ) ;

verkohlen Puffer [ 8 ] ;

sgFile. lesen ( Puffer , 8 ) ;

cout << 'Inhalt: ' << Puffer << endl ;

sgFile. schließen ( ) ;

zurückkehren 0 ;

}

Dieses C++-Programm öffnet eine Datei mit dem Namen „seekgFile.txt“, die mithilfe von sgFile.seekg(-4, ios::end) den Get-Zeiger von vier Zeichen vom Ende der Datei nach hinten verschiebt und die nächsten acht Zeichen von dieser Position aus einliest einen Puffer und gibt dann den Inhalt des Puffers auf der Konsole aus. Angesichts des Inhalts der Datei als „seekg()-Funktion“ ist die erwartete Ausgabe „ction“. Vergleichen wir die Ausgabe im Screenshot mit der folgenden Ausgabe:

Abschluss

Zusammenfassend erweist sich searchg() als wertvolles Hilfsmittel für die präzise Navigation durch die Dateiströme. Durch seine Fähigkeit, beliebige Positionen zu suchen, die Offsets dynamisch zu berechnen und von verschiedenen Punkten innerhalb einer Datei aus zu navigieren, ermöglicht seegg() den Entwicklern, die Dateioperationen effizient abzuwickeln. Wie wir in den Beispielen gesehen haben, verbessert die Beherrschung von seegg() Ihre Kontrolle und Flexibilität bei der Arbeit mit Dateistreams in C++. Es erfordert jedoch eine sorgfältige Abwägung der Ausnahmebehandlung und potenzieller Datenwettlaufszenarien, um robuste und fehlerfreie Dateioperationen in C++ sicherzustellen.