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