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