Fungsi C++ Seekg()

Fungsi C Seekg



Dalam pemrograman C++, fungsi seekg() memberikan bantuan dalam aliran file. Ini adalah anggota perpustakaan iostream dan Anda akan menemukannya di header . Fungsi ini memungkinkan pemrogram untuk memanipulasi di mana operasi masukan berikutnya dimulai, sehingga menyederhanakan proses kerja dengan file. Metode seekg() memungkinkan Anda melompat ke lokasi tertentu dalam file yang sangat berharga ketika Anda perlu membaca atau memproses data yang tidak disusun secara berurutan. Baik Anda ingin membaca dari awal, tengah, atau akhir file, seekg() memberikan fleksibilitas yang diperlukan untuk tugas tersebut. Sepanjang panduan ini, kita akan mempelajari bagaimana fungsi seekg() di C++ memungkinkan pengambilan data dari berbagai titik dalam file.

Sintaks dan Parameter Fungsi Seekg() di C++

Seekg() dapat diimplementasikan dengan dua sintaksis:

1. Sintaks Streampos

sungai kecil & mencari ( posting streampos ) ;

Sintaks ini hanya mengambil satu parameter, posisi, yang mewakili posisi kursor di buffer aliran. Ini mewakili nilai 'int' dan bertipe streampos.







2. Sintaks Offset dan Arah

sungai kecil & mencari ( sering mengalir , ios_base :: mencari adalah kotoran ) ;

Sintaks ini mengambil dua parameter sebagai masukan: offset dan arah. Parameter “ofst” adalah bilangan bulat bertipe streamoff yang menunjukkan offset dalam buffer aliran. Parameter “kotoran” mencari arah.



  • ios_base::beg: Offset dari awal buffer aliran.
  • ios_base::cur: Offset dari posisi saat ini di buffer aliran.
  • ios_base::end: Offset dari buffer aliran terakhir.

Fungsi seekg() di C++ memanipulasi penunjuk file, memungkinkan pemrogram untuk memposisikannya di lokasi tertentu di dalam file. Ini mengembalikan modifikasi objek 'istream' (*ini) dan menyesuaikan penunjuk file.



Penanganan Kesalahan dan Pengecualian pada Fungsi C++ Seekg()

Fungsi seekg() di C++ memastikan jaminan dasar untuk penanganan pengecualian, menjaga validitas objek jika terjadi pengecualian. Ini mungkin memunculkan pengecualian 'kegagalan' ketika tanda status kesalahan tidak memiliki informasi, dan fungsi tersebut secara bertanggung jawab menangkap dan mengelola pengecualian ini, membuangnya kembali jika bit buruk disetel pada panggilan terakhir.





Selain itu, masalah umum dengan seekg() terjadi ketika mencapai akhir file (EOF), menyebabkan penunjuk tetap tidak disetel dan memicu kesalahan. Metode clear() digunakan untuk mereset pointer dan menyelesaikan kesalahan terkait EOF untuk mengatasinya. Selain itu, seekg() mungkin berisiko mengubah objek aliran di lingkungan multithread, sehingga memerlukan kehati-hatian dan penerapan mekanisme sinkronisasi untuk mengurangi potensi perubahan objek “ofstream”.

Contoh 1: Dasar-dasar Seekg()

Pada contoh pertama, kami akan menjelaskan dasar-dasar fungsi seekg() di C++. Kode program C++ diberikan sebagai berikut. Simak dulu, baru kita lanjut ke penjelasan tiap bagian kodenya.



#termasuk

#termasuk

menggunakan namespace std ;

ke dalam utama ( ke dalam argc , arang ** argv ) {

fstream sgFile ( 'mencariFile.txt' , ios :: di dalam | ios :: keluar | ios :: belalai ) ;

sgFile << 'fungsi pencarian ()' ;

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

arang sgArray [ 8 ] ;

sgFile. membaca ( sgArray , 8 ) ;

sgArray [ 8 ] = 0 ;

cout << sgArray << akhir ;

sgFile. menutup ( ) ;

}

Program ini mencakup dua file header yang diperlukan – dan – masing-masing untuk penanganan file dan operasi input/output. Setelah itu, “using namespace std;” pernyataan disertakan, mengizinkan pengidentifikasi C++ standar tanpa menentukan namespace secara eksplisit. Terakhir, fungsi utama dimulai, yang merupakan titik masuk program, dengan menggunakan argumen baris perintah (argc dan argv).

fstream sgFile(“seekgFile.txt”, ios::masuk | ios::keluar | ios::batang); – Di sini, “sgFile”, sebuah objek dari kelas “fstream”, dibuat, mewakili aliran file. File bernama “seekgFile.txt” dikaitkan dengan aliran file. Aliran file dibuka untuk input (ios::in) output (ios::out). Jika file ada, isinya terpotong (ios::trunc).

sgFile << “fungsi pencarian ()”; – String “seekg() function” ditulis ke file menggunakan operator “<<”.

sgFile.seekg(8, ios::mohon); – Fungsi seekg() digunakan untuk mengatur penunjuk get pada posisi ke-8 dari awal (ios::beg) file.

sgFile.baca(sgArray, 8); – Fungsi 'baca' digunakan untuk membaca delapan karakter dari posisi penunjuk get saat ini ke dalam 'sgArray'.

sgArray[8] = 0; – Null mengakhiri array karakter untuk memastikan penanganan string yang tepat.

cout< Konten “sgArray” (8 karakter yang dibaca dari file) ditampilkan di konsol menggunakan cout.

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

Output dari program ini diharapkan dapat “berfungsi”. Mari kita periksa di cuplikan keluaran berikut:

Kode tersebut membuat aliran file yang terkait dengan file “seekgFile.txt” menulis string ke file, mencari posisi ke-8 dari awal, membaca delapan karakter, dan mengeluarkan konten yang telah dibaca. Akhirnya, aliran file ditutup.

Contoh 2: Navigasi Dinamis

Pertimbangkan skenario di mana Anda harus menghitung offset seekg() secara dinamis. Mari kita pahami cara menghitung offset secara dinamis dengan bantuan contoh kode.

#termasuk

#termasuk

menggunakan namespace std ;

ke dalam utama ( ) {

ifstream sgFile ( 'mencariFile.txt' ) ;

ke dalam mengimbangi = 8 ;

sgFile. mencari ( mengimbangi , ios :: meletakkan ) ;

arang penyangga [ 8 ] ;

sgFile. membaca ( penyangga , 8 ) ;

cout << 'Isi: ' << penyangga << akhir ;

sgFile. menutup ( ) ;

kembali 0 ;

}

Seperti yang Anda lihat, kami membaca konten dari file yang sama yang kami buat pada contoh sebelumnya, “seekgFile.txt”. Fungsi seekg() menyetel penunjuk get pada posisi saat ini (ios::cur) dalam file, dan dipindahkan berdasarkan offset terhitung (8 karakter). Fungsi read() membaca delapan karakter dari posisi penunjuk get saat ini ke dalam buffer.

Mengingat konten file “fungsi seekg()” dan offset delapan karakter, program akan mengeluarkan substring yang dimulai dari karakter ke-9 file. Oleh karena itu, hasil yang diharapkan dari program ini adalah “fungsi”. Mari kita konfirmasikan dalam output yang diberikan berikut ini:

Contoh ini menunjukkan fleksibilitas seekg() dengan menghitung offset secara dinamis.

Contoh 3: Menavigasi dari Akhir

Dalam contoh ini, kami akan mendemonstrasikan cara membaca data dalam suatu file dari akhir file. Di sini, seekg() digunakan untuk menavigasi dari akhir file. Offset negatif menunjukkan posisi yang relatif terhadap akhir. Lihat kode yang diberikan berikut ini:

#termasuk

#termasuk

menggunakan namespace std ;

ke dalam utama ( ) {

ifstream sgFile ( 'mencariFile.txt' ) ;

sgFile. mencari ( - 4 , ios :: akhir ) ;

arang penyangga [ 8 ] ;

sgFile. membaca ( penyangga , 8 ) ;

cout << 'Isi: ' << penyangga << akhir ;

sgFile. menutup ( ) ;

kembali 0 ;

}

Program C++ ini membuka file bernama “seekgFile.txt” yang memindahkan penunjuk get empat karakter ke belakang dari akhir file menggunakan sgFile.seekg(-4, ios::end), membaca delapan karakter berikutnya dari posisi tersebut ke dalam buffer, lalu mencetak konten buffer ke konsol. Mengingat konten file sebagai fungsi 'seekg()', keluaran yang diharapkan adalah 'ction'. Mari kita cocokkan keluaran pada tangkapan layar keluaran berikut:

Kesimpulan

Singkatnya, seekg() muncul sebagai aset berharga untuk menavigasi aliran file dengan presisi. Melalui kemampuannya untuk mencari posisi sewenang-wenang, menghitung offset secara dinamis, dan bernavigasi dari berbagai titik dalam file, seekg() memberdayakan pengembang untuk menangani operasi file secara efisien. Seperti yang telah kita lihat dalam contoh, menguasai seekg() meningkatkan kontrol dan fleksibilitas Anda saat bekerja dengan aliran file di C++. Namun, hal ini memerlukan pertimbangan yang cermat terhadap penanganan pengecualian dan potensi skenario perlombaan data untuk memastikan operasi file yang kuat dan bebas kesalahan di C++.