C++ Seekg() funkcija

C Seekg Funkcija



Programmēšanā C++ funkcija seekg () nodrošina palīdzību failu plūsmās. Tas ir iostream bibliotēkas dalībnieks, un jūs to atradīsit galvenē . Šī funkcija ļauj programmētājiem manipulēt ar to, kur sākas nākamā ievades darbība, tādējādi racionalizējot darba procesu ar failiem. Metode seekg() ļauj pāriet uz noteiktu vietu failā, kas ir nenovērtējama, ja nepieciešams lasīt vai apstrādāt datus, kas nav sakārtoti secīgi. Neatkarīgi no tā, vai vēlaties lasīt no faila sākuma, vidus vai beigām, seekg() nodrošina elastību, kas nepieciešama šādiem uzdevumiem. Šajā rokasgrāmatā mēs iedziļināsimies, kā seekg() funkcijas programmā C++ nodrošina datu izgūšanu no dažādiem faila punktiem.

Funkcijas Seekg() sintakse un parametri programmā C++

Seekg () var ieviest ar divām sintaksēm:

1. Streampos sintakse

straume & seekg ( streampos post ) ;

Šī sintakse aizņem tikai vienu parametru, pozīciju, kas attēlo kursora pozīciju straumes buferī. Tas apzīmē “int” vērtību un tipa streampos.







2. Nobīdes un virziena sintakse

straume & seekg ( straumējiet bieži , ios_base :: meklēt ir netīrumi ) ;

Šī sintakse kā ievadi izmanto divus parametrus: nobīdi un virzienu. Parametrs “ofst” ir straumēšanas veida vesels skaitlis, kas norāda nobīdi straumes buferī. Parametrs 'netīrumi' meklē virzienu.



  • ios_base::beg: Nobīde no paša straumes bufera sākuma.
  • ios_base::cur: Nobīde no pašreizējās pozīcijas straumes buferī.
  • ios_base::end: Nobīde no pēdējās straumes bufera.

Funkcija seekg () programmā C++ manipulē ar faila rādītāju, ļaujot programmētājam to novietot noteiktā faila vietā. Tas atgriež objekta “istream” modifikāciju (*this) un attiecīgi pielāgo faila rādītāju.



Kļūdu un izņēmumu apstrāde C++ Seekg() funkcijā

Funkcija seekg() programmā C++ nodrošina pamata garantiju izņēmumu apstrādei, saglabājot objekta derīgumu izņēmuma gadījumā. Ja kļūdas stāvokļa karogam trūkst informācijas, tā var radīt “kļūmes” izņēmumus, un funkcija atbildīgi uztver un pārvalda šos izņēmumus, izmetot tos atkārtoti, ja pēdējā izsaukumā tika iestatīts slikts bits.





Turklāt bieži sastopama problēma ar seekg() rodas, kad tas sasniedz faila beigas (EOF), kā rezultātā rādītājs paliek nenoregulēts un tiek izraisīta kļūda. Clear() metode tiek izmantota, lai atiestatītu rādītāju un atrisinātu ar EOF saistītās kļūdas, lai to novērstu. Turklāt seekg() var radīt risku mainīt straumes objektu daudzpavedienu vidē, tādēļ ir nepieciešama piesardzība un sinhronizācijas mehānismu ieviešana, lai mazinātu iespējamās “ārpusstraumes” objektu izmaiņas.

1. piemērs: Seekg() pamati

Pirmajā piemērā mēs izskaidrosim seekg() funkcijas pamatus C++ valodā. C++ programmas kods ir norādīts tālāk. Vispirms apskatiet to, un tad mēs pāriesim pie katras koda sadaļas skaidrojuma.



#include

#include

izmantojot namespace std ;

starpt galvenais ( starpt argc , char ** argv ) {

fstream sgFile ( 'seekgFile.txt' , ios :: iekšā | ios :: ārā | ios :: bagāžnieks ) ;

sgFile << 'seekg() funkcija' ;

sgFile. seekg ( 8 , ios :: ubagot ) ;

char sgArray [ 8 ] ;

sgFile. lasīt ( sgArray , 8 ) ;

sgArray [ 8 ] = 0 ;

cout << sgArray << endl ;

sgFile. aizveriet ( ) ;

}

Programma ietver divus nepieciešamos galvenes failus - un - attiecīgi failu apstrādei un ievades/izvades darbībām. Pēc tam “izmantojot nosaukumvietu std;” ir iekļauts paziņojums, kas ļauj izmantot standarta C++ identifikatorus, skaidri nenorādot nosaukumvietu. Visbeidzot, sākas galvenā funkcija, kas ir programmas ieejas punkts, izmantojot komandrindas argumentus (argc un argv).

fstream sgFile(“seekgFile.txt”, ios::in | ios::out | ios::stumbrs); – Šeit tiek izveidots “sgFile”, “fstream” klases objekts, kas attēlo failu straumi. Fails ar nosaukumu “seekgFile.txt” ir saistīts ar faila straumi. Failu straume tiek atvērta ievades (ios::in) izvadei (ios::out). Ja fails pastāv, tā saturs tiek saīsināts (ios::trunc).

sgFile << “seekg() funkcija”; – Virkne “seekg() function” tiek ierakstīta failā, izmantojot operatoru “<<”.

sgFile.seekg(8, ios::beg); – Funkciju seekg() izmanto, lai iestatītu iegūšanas rādītāju 8. pozīcijā no faila sākuma (ios::beg).

sgFile.read(sgArray, 8); – Funkciju “lasīt” izmanto, lai no pašreizējās iegūšanas rādītāja pozīcijas nolasītu astoņas rakstzīmes “sgArray”.

sgArray[8] = 0; – Null pārtrauc rakstzīmju masīvu, lai nodrošinātu pareizu virkņu apstrādi.

cout << sgArray << endl; – “sgArray” saturs (8 rakstzīmes, kas nolasītas no faila) tiek parādīts konsolē, izmantojot cout.

sgFile.close(); – Funkcija close () tiek izmantota, lai aizvērtu failu straumi.

Paredzams, ka šīs programmas rezultāts būs “funkcija”. Pārbaudīsim to šajā izvades fragmentā:

Kods izveido faila straumi, kas ir saistīta ar failu “seekgFile.txt”, ieraksta failā virkni, meklē 8. pozīciju no sākuma, nolasa astoņas rakstzīmes un izvada nolasīto saturu. Visbeidzot, failu straume ir aizvērta.

2. piemērs: dinamiskā navigācija

Apsveriet scenāriju, kurā jums dinamiski jāaprēķina seekg() nobīde. Ļaujiet mums saprast, kā dinamiski aprēķināt nobīdi, izmantojot koda piemēru.

#include

#include

izmantojot namespace std ;

starpt galvenais ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

starpt kompensēt = 8 ;

sgFile. seekg ( kompensēt , ios :: ielieciet ) ;

char buferis [ 8 ] ;

sgFile. lasīt ( buferis , 8 ) ;

cout << 'Saturs:' << buferis << endl ;

sgFile. aizveriet ( ) ;

atgriezties 0 ;

}

Kā redzat, mēs lasām saturu no tā paša faila, kuru izveidojām iepriekšējā piemērā, “seekgFile.txt”. Funkcija seekg() iestata iegūšanas rādītāju faila pašreizējā pozīcijā (ios::cur), un tas tiek pārvietots ar aprēķināto nobīdi (8 rakstzīmes). Funkcija read() nolasa astoņas rakstzīmes no pašreizējās get rādītāja pozīcijas buferī.

Ņemot vērā “seekg() function” faila saturu un astoņu rakstzīmju nobīdi, programma izvadīs apakšvirkni, kas sākas no faila 9. rakstzīmes. Tāpēc programmas sagaidāmais rezultāts ir “funkcija”. Ļaujiet mums apstiprināt to šādā izvadā:

Šis piemērs parāda seekg() elastību, dinamiski aprēķinot nobīdi.

3. piemērs. Navigācija no gala

Šajā piemērā mēs parādīsim, kā nolasīt datus failā no faila beigām. Šeit seekg() tiek izmantots, lai pārvietotos no faila beigām. Negatīvā nobīde norāda pozīciju, kas ir attiecībā pret beigām. Skatiet tālāk norādīto kodu:

#include

#include

izmantojot namespace std ;

starpt galvenais ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

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

char buferis [ 8 ] ;

sgFile. lasīt ( buferis , 8 ) ;

cout << 'Saturs:' << buferis << endl ;

sgFile. aizveriet ( ) ;

atgriezties 0 ;

}

Šī C++ programma atver failu ar nosaukumu “seekgFile.txt”, kas pārvieto četru rakstzīmju iegūšanas rādītāju atpakaļ no faila beigām, izmantojot sgFile.seekg(-4, ios::end), nolasa nākamās astoņas rakstzīmes no šīs pozīcijas uz buferi un pēc tam izdrukā bufera saturu konsolē. Ņemot vērā faila saturu kā “seekg() funkciju”, paredzamā izvade ir “ction”. Ļaujiet mums saskaņot izvadi šādas izvades ekrānuzņēmumā:

Secinājums

Rezumējot, seekg () parādās kā vērtīgs līdzeklis, lai precīzi pārvietotos pa failu plūsmām. Pateicoties savai spējai meklēt patvaļīgas pozīcijas, dinamiski aprēķināt nobīdes un pārvietoties no dažādiem faila punktiem, seekg() dod iespēju izstrādātājiem efektīvi apstrādāt ar failu saistītās darbības. Kā redzams piemēros, seekg() apguve uzlabo kontroli un elastību, strādājot ar failu straumēm programmā C++. Tomēr ir rūpīgi jāapsver izņēmumu apstrāde un iespējamie datu sacīkšu scenāriji, lai nodrošinātu stabilas un bez kļūdām failu darbības C++.