Fungsi C++ Seekg().

Fungsi C Seekg



Dalam pengaturcaraan C++, fungsi seekg() menyediakan bantuan dalam aliran fail. Ia merupakan ahli pustaka iostream dan anda akan menemuinya dalam pengepala . Fungsi ini membolehkan pengaturcara untuk memanipulasi di mana operasi input seterusnya bermula, dengan itu memperkemas proses kerja dengan fail. Kaedah seekg() membolehkan anda melompat ke lokasi tertentu dalam fail yang tidak ternilai apabila anda perlu membaca atau memproses data yang tidak disusun secara berurutan. Sama ada anda menyasarkan untuk membaca dari awal, tengah atau akhir fail, seekg() menyediakan fleksibiliti yang diperlukan untuk tugasan tersebut. Sepanjang panduan ini, kami akan menyelidiki bagaimana seekg() berfungsi dalam C++ membolehkan pengambilan data dari pelbagai titik dalam fail.

Sintaks dan Parameter Fungsi Seekg() dalam C++

Seekg() boleh dilaksanakan dengan dua sintaks:

1. Sintaks Streampos

aliran & seekg ( siaran streampos ) ;

Sintaks ini hanya mengambil satu parameter, kedudukan, yang mewakili kedudukan kursor dalam penimbal strim. Ia mewakili nilai 'int' dan jenis streampos.







2. Offset dan Sintaks Arah

aliran & seekg ( kerap strim , ios_base :: cari adalah kotoran ) ;

Sintaks ini mengambil dua parameter sebagai input: offset dan arah. Parameter 'ofst' ialah integer jenis streamoff yang menunjukkan offset dalam buffer strim. Parameter 'kotoran' mencari arah.



  • ios_base::beg: Mengimbangi dari permulaan penimbal strim.
  • ios_base::cur: Mengimbangi daripada kedudukan semasa dalam penimbal strim.
  • ios_base::end: Offset daripada penimbal strim terakhir.

Fungsi seekg() dalam C++ memanipulasi penuding fail, membolehkan pengaturcara meletakkannya di lokasi tertentu dalam fail. Ia mengembalikan pengubahsuaian objek 'istream' (*ini) dan melaraskan penunjuk fail dengan sewajarnya.



Pengendalian Ralat dan Pengecualian dalam Fungsi C++ Seekg().

Fungsi seekg() dalam C++ memastikan jaminan asas untuk pengendalian pengecualian, mengekalkan kesahihan objek jika pengecualian berlaku. Ia mungkin membuang pengecualian 'kegagalan' apabila bendera keadaan ralat kekurangan maklumat, dan fungsi secara bertanggungjawab menangkap dan mengurus pengecualian ini, melemparkannya semula jika bit buruk telah ditetapkan dalam panggilan terakhir.





Selain itu, isu biasa dengan seekg() berlaku apabila ia mencapai akhir fail (EOF), menyebabkan penuding kekal tidak ditetapkan dan mencetuskan ralat. Kaedah clear() digunakan untuk menetapkan semula penunjuk dan menyelesaikan ralat berkaitan EOF untuk menangani perkara ini. Selain itu, seekg() mungkin berisiko mengubah objek aliran dalam persekitaran berbilang benang, memerlukan berhati-hati dan pelaksanaan mekanisme penyegerakan untuk mengurangkan kemungkinan perubahan objek 'ofstream'.

Contoh 1: Asas Seekg()

Dalam contoh pertama, kami akan menerangkan asas fungsi seekg() dalam C++. Kod program C++ diberikan dalam perkara berikut. Sila lihat dahulu dan kemudian kita akan beralih kepada penjelasan setiap bahagian kod.



#include

#include

menggunakan ruang nama std ;

int utama ( int argc , char ** argv ) {

fstream sgFile ( 'seekgFile.txt' , ios :: dalam | ios :: keluar | ios :: batang ) ;

sgFile << 'fungsi seekg()' ;

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

char sgArray [ 8 ] ;

sgFile. membaca ( sgArray , 8 ) ;

sgArray [ 8 ] = 0 ;

cout << sgArray << endl ;

sgFile. dekat ( ) ;

}

Program ini termasuk dua fail pengepala yang diperlukan – dan – masing-masing untuk pengendalian fail dan operasi input/output. Selepas itu, 'menggunakan ruang nama std;' pernyataan disertakan, membenarkan pengecam standard C++ tanpa menyatakan ruang nama secara eksplisit. Akhirnya, fungsi utama bermula, iaitu titik masuk program, mengambil argumen baris perintah (argc dan argv).

fstream sgFile(“seekgFile.txt”, ios::in | ios::out | ios::trunk); – Di sini, 'sgFile', objek kelas 'fstream', dicipta, mewakili aliran fail. Fail bernama 'seekgFile.txt' dikaitkan dengan strim fail. Strim fail dibuka untuk input (ios::in) output (ios::out). Jika fail itu wujud, kandungannya akan dipotong (ios::trunc).

sgFail << “fungsi seekg()”; – Rentetan “seekg() function” ditulis pada fail menggunakan operator “<<”.

sgFile.seekg(8, ios::beg); – Fungsi seekg() digunakan untuk menetapkan penunjuk get pada kedudukan ke-8 dari awal (ios::beg) fail.

sgFile.read(sgArray, 8); – Fungsi 'baca' digunakan untuk membaca lapan aksara dari kedudukan semasa penuding dapatkan ke dalam 'sgArray'.

sgArray[8] = 0; – Null menamatkan tatasusunan aksara untuk memastikan pengendalian rentetan yang betul.

cout << sgArray << endl; – Kandungan 'sgArray' (8 aksara dibaca daripada fail) dipaparkan pada konsol menggunakan cout.

sgFile.close(); – Fungsi close() digunakan untuk menutup aliran fail.

Output program ini dijangka menjadi 'fungsi'. Mari kita semaknya dalam coretan output berikut:

Kod mencipta aliran fail yang dikaitkan dengan fail 'seekgFile.txt' menulis rentetan pada fail, mencari kedudukan ke-8 dari awal, membaca lapan aksara dan mengeluarkan kandungan yang dibaca. Akhirnya, aliran fail ditutup.

Contoh 2: Navigasi Dinamik

Pertimbangkan senario di mana anda mesti mengira secara dinamik offset seekg(). Marilah kita memahami cara mengira secara dinamik offset dengan bantuan contoh kod.

#include

#include

menggunakan ruang nama std ;

int utama ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

int mengimbangi = 8 ;

sgFile. seekg ( mengimbangi , ios :: letak ) ;

char penampan [ 8 ] ;

sgFile. membaca ( penampan , 8 ) ;

cout << 'Kandungan: ' << penampan << endl ;

sgFile. dekat ( ) ;

kembali 0 ;

}

Seperti yang anda lihat, kami sedang membaca kandungan daripada fail yang sama yang kami buat dalam contoh sebelumnya, 'seekgFile.txt'. Fungsi seekg() menetapkan penunjuk dapatkan pada kedudukan semasa (ios::cur) dalam fail, dan ia digerakkan oleh offset yang dikira (8 aksara). Fungsi read() membaca lapan aksara daripada kedudukan semasa penuding get ke dalam penimbal.

Memandangkan kandungan fail 'seekg() function' dan pengimbangan lapan aksara, program akan mengeluarkan subrentetan yang bermula daripada aksara ke-9 fail. Oleh itu, hasil yang diharapkan dari program ini adalah 'fungsi'. Marilah kita mengesahkannya dalam output yang diberikan berikut:

Contoh ini menunjukkan fleksibiliti seekg() dengan mengira offset secara dinamik.

Contoh 3: Menavigasi dari Akhir

Dalam contoh ini, kami akan menunjukkan cara membaca data dalam fail dari hujung fail. Di sini, seekg() digunakan untuk menavigasi dari hujung fail. Offset negatif menunjukkan kedudukan yang relatif kepada penghujung. Lihat kod yang diberikan berikut:

#include

#include

menggunakan ruang nama std ;

int utama ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

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

char penampan [ 8 ] ;

sgFile. membaca ( penampan , 8 ) ;

cout << 'Kandungan: ' << penampan << endl ;

sgFile. dekat ( ) ;

kembali 0 ;

}

Program C++ ini membuka fail bernama 'seekgFile.txt' yang menggerakkan penunjuk dapatkan empat aksara ke belakang dari hujung fail menggunakan sgFile.seekg(-4, ios::end), membaca lapan aksara seterusnya dari kedudukan itu ke dalam penimbal, dan kemudian mencetak kandungan penimbal ke konsol. Memandangkan kandungan fail sebagai fungsi 'seekg()', output yang dijangkakan ialah 'ction'. Mari kita padankan output dalam tangkapan skrin output berikut:

Kesimpulan

Ringkasnya, seekg() muncul sebagai aset berharga untuk menavigasi aliran fail dengan tepat. Melalui keupayaannya untuk mencari kedudukan sewenang-wenangnya, mengira offset secara dinamik dan menavigasi dari titik berbeza dalam fail, seekg() memberi kuasa kepada pembangun untuk mengendalikan operasi fail dengan cekap. Seperti yang telah kita lihat dalam contoh, menguasai seekg() meningkatkan kawalan dan fleksibiliti anda apabila bekerja dengan aliran fail dalam C++. Walau bagaimanapun, ia memerlukan pertimbangan yang teliti terhadap pengendalian pengecualian dan senario perlumbaan data yang berpotensi untuk memastikan operasi fail yang teguh dan bebas ralat dalam C++.