C++ Seekg()-funktio

C Seekg Funktio



C++-ohjelmoinnissa seekg()-funktio auttaa tiedostovirroissa. Se on iostream-kirjaston jäsen ja löydät sen -otsikosta. Tämän toiminnon avulla ohjelmoijat voivat muokata sitä, mistä seuraava syöttötoiminto alkaa, mikä virtaviivaistaa työprosessia tiedostoilla. Seekg()-menetelmän avulla voit siirtyä tiettyyn paikkaan tiedostossa, mikä on korvaamatonta, kun sinun on luettava tai käsiteltävä tietoja, joita ei ole järjestetty peräkkäin. Haluatpa lukea tiedoston alusta, keskeltä tai lopusta, seekg() tarjoaa tällaisten tehtävien edellyttämän joustavuuden. Tässä oppaassa tutkimme, kuinka seekg()-funktiot C++:ssa mahdollistavat tietojen haun tiedoston eri kohdista.

Seekg()-funktion syntaksi ja parametrit C++:ssa

Seekg() voidaan toteuttaa kahdella syntaksilla:

1. Streampos-syntaksi

virta & seekg ( streampos post ) ;

Tämä syntaksi ottaa vain yhden parametrin, sijainnin, joka edustaa kursorin sijaintia virtapuskurissa. Se edustaa 'int'-arvoa ja tyyppiä streampos.







2. Siirtymä- ja suuntasyntaksi

virta & seekg ( virtaa pois usein , ios_base :: etsiä on lika ) ;

Tämä syntaksi ottaa syötteenä kaksi parametria: offset ja suunta. Parametri 'ofst' on streamoff-tyyppinen kokonaisluku, joka ilmaisee siirtymän virran puskurissa. 'Dirt'-parametri hakee suuntaa.



  • ios_base::beg: Poikkeama streamin puskurin alusta.
  • ios_base::cur: Poikkeama nykyisestä sijainnista streamin puskurissa.
  • ios_base::end: Poikkeama virran viimeisestä puskurista.

Seekg()-funktio C++:ssa manipuloi tiedostoosoitinta, jolloin ohjelmoija voi sijoittaa sen tiettyyn paikkaan tiedostossa. Se palauttaa 'istream'-objektin muokkauksen (*this) ja säätää tiedostoosoittimen vastaavasti.



Virheiden ja poikkeusten käsittely C++ Seekg()-funktiossa

Seekg()-funktio C++:ssa takaa poikkeuksien käsittelyn perustakuun, säilyttäen objektin kelvollisuuden poikkeuksen sattuessa. Se voi heittää 'epäonnistumisen' poikkeuksia, kun virhetilalipusta puuttuu tietoja, ja toiminto ottaa vastuullisesti kiinni ja hallitsee nämä poikkeukset ja heittää ne uudelleen, jos viimeisessä kutsussa asetettiin huono bitti.





Lisäksi yleinen seekg()-ongelma ilmenee, kun se saavuttaa tiedoston lopun (EOF), jolloin osoitin pysyy määrittämättä ja laukaisee virheen. Clear()-menetelmää käytetään osoittimen nollaamiseen ja EOF-virheiden ratkaisemiseen tämän korjaamiseksi. Lisäksi seekg() saattaa muuttaa stream-objektia monisäikeisessä ympäristössä, mikä edellyttää varovaisuutta ja synkronointimekanismien toteuttamista mahdollisten 'ofstream'-objektien muutosten vähentämiseksi.

Esimerkki 1: Seekg()

Ensimmäisessä esimerkissä selitämme seekg()-funktion perusteet C++:ssa. C++-ohjelman koodi on annettu seuraavassa. Katso ensin sitä ja siirrymme sitten koodin kunkin osan selittämiseen.



#include

#include

käyttäen nimiavaruutta std ;

int pää ( int argc , hiiltyä ** argv ) {

fstream sgFile ( 'seekgFile.txt' , ios :: sisään | ios :: ulos | ios :: runko ) ;

sgFile << 'seekg()-funktio' ;

sgFile. seekg ( 8 , ios :: kerjätä ) ;

hiiltyä sgArray [ 8 ] ;

sgFile. lukea ( sgArray , 8 ) ;

sgArray [ 8 ] = 0 ;

cout << sgArray << endl ;

sgFile. kiinni ( ) ;

}

Ohjelma sisältää kaksi tarvittavaa otsikkotiedostoa - ja - tiedostojen käsittelyä ja syöttö-/tulostustoimintoja varten. Sen jälkeen 'using namespace std;' lauseke on mukana, mikä sallii vakio C++ -tunnisteet ilman, että nimiavaruutta erikseen määritetään. Lopuksi alkaa päätoiminto, joka on ohjelman aloituspiste ja ottaa komentoriviargumentit (argc ja argv).

fstream sgFile('seekgFile.txt', ios::in | ios::out | ios::runko); – Täällä luodaan 'sgFile', 'fstream'-luokan objekti, joka edustaa tiedostovirtaa. Tiedosto nimeltä seekgFile.txt liittyy tiedostovirtaan. Tiedostovirta avataan syöttöä (ios::in) varten (ios::out). Jos tiedosto on olemassa, sen sisältö katkaistaan ​​(ios::trunc).

sgFile << “seekg()-funktio”; – 'Seekg()-funktio'-merkkijono kirjoitetaan tiedostoon '<<'-operaattorilla.

sgFile.seekg(8, ios::beg); – Seekg()-funktiota käytetään asettamaan get-osoittimen 8. paikkaan tiedoston alusta (ios::beg).

sgFile.read(sgArray, 8); – 'Read'-toimintoa käytetään lukemaan kahdeksan merkkiä get-osoittimen nykyisestä sijainnista 'sgArray'-kenttään.

sgArray[8] = 0; – Null päättää merkkijonon oikean merkkijonon käsittelyn varmistamiseksi.

cout << sgArray << endl; – 'sgArray':n sisältö (tiedostosta luetut 8 merkkiä) näytetään konsolissa komennolla cout.

sgFile.close(); – Sulje()-funktiota käytetään tiedostovirran sulkemiseen.

Tämän ohjelman tulosteen odotetaan olevan 'toiminto'. Tarkastetaan se seuraavasta tulostepätkästä:

Koodi luo tiedostovirran, joka liittyy 'seekgFile.txt' -tiedostoon, joka kirjoittaa tiedostoon merkkijonon, etsii 8. paikan alusta, lukee kahdeksan merkkiä ja tulostaa luetun sisällön. Lopuksi tiedostovirta suljetaan.

Esimerkki 2: Dynaaminen navigointi

Harkitse skenaariota, jossa sinun on laskettava seekg() offset dynaamisesti. Ymmärrämme kuinka offset lasketaan dynaamisesti koodiesimerkin avulla.

#include

#include

käyttäen nimiavaruutta std ;

int pää ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

int offset = 8 ;

sgFile. seekg ( offset , ios :: laittaa ) ;

hiiltyä puskuri [ 8 ] ;

sgFile. lukea ( puskuri , 8 ) ;

cout << 'Sisältö: ' << puskuri << endl ;

sgFile. kiinni ( ) ;

palata 0 ;

}

Kuten näet, luemme sisältöä samasta tiedostosta, jonka loimme edellisessä esimerkissä, 'seekgFile.txt'. Seekg()-funktio asettaa get-osoittimen tiedoston nykyiseen sijaintiin (ios::cur) ja sitä siirretään lasketulla siirtymällä (8 merkkiä). Read()-funktio lukee kahdeksan merkkiä get-osoittimen nykyisestä sijainnista puskuriin.

Kun otetaan huomioon 'seekg() function' -tiedoston sisältö ja kahdeksan merkin siirtymä, ohjelma tulostaa alimerkkijonon, joka alkaa tiedoston 9. merkistä. Siksi ohjelman odotettu tulos on 'toiminto'. Vahvistakaamme se seuraavassa annetussa tulosteessa:

Tämä esimerkki osoittaa seekg():n joustavuuden laskemalla siirtymän dynaamisesti.

Esimerkki 3: Navigointi lopusta

Tässä esimerkissä näytämme kuinka tiedoston tiedot luetaan tiedoston lopusta. Tässä sekg()-komentoa käytetään navigoimaan tiedoston lopusta. Negatiivinen siirtymä osoittaa paikan, joka on suhteessa loppuun. Katso seuraava annettu koodi:

#include

#include

käyttäen nimiavaruutta std ;

int pää ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

sgFile. seekg ( - 4 , ios :: loppu ) ;

hiiltyä puskuri [ 8 ] ;

sgFile. lukea ( puskuri , 8 ) ;

cout << 'Sisältö: ' << puskuri << endl ;

sgFile. kiinni ( ) ;

palata 0 ;

}

Tämä C++-ohjelma avaa tiedoston nimeltä 'seekgFile.txt', joka siirtää neljän merkin hakuosoittimen tiedoston lopusta taaksepäin komennolla sgFile.seekg(-4, ios::end), lukee seuraavat kahdeksan merkkiä kyseisestä paikasta puskurin ja tulostaa sitten puskurin sisällön konsoliin. Kun tiedoston sisältö on 'seekg()-funktiona', odotettu tulos on 'ction'. Yhdistäkäämme seuraavan lähdön kuvakaappauksen tulos:

Johtopäätös

Yhteenvetona voidaan todeta, että seekg() on arvokas ominaisuus tiedostovirtojen tarkassa navigoinnissa. Koska seekg() pystyy etsimään mielivaltaisia ​​paikkoja, laskemaan dynaamisesti siirtymät ja navigoimaan tiedoston eri kohdista, se antaa kehittäjille mahdollisuuden käsitellä tiedostotoimintoja tehokkaasti. Kuten esimerkeistä olemme nähneet, seekg():n hallitseminen parantaa hallintaasi ja joustavuutta työskennellessäsi tiedostovirtojen kanssa C++:ssa. Se vaatii kuitenkin poikkeuksien käsittelyn ja mahdollisten datakilpailuskenaarioiden huolellista harkintaa, jotta voidaan varmistaa vakaat ja virheettömät tiedostotoiminnot C++:ssa.