Berkas dan Stream C++

Halo, para pemrogram masa depan! Hari ini, kita akan memulai perjalanan yang menarik ke dunia berkas dan stream C++. Sebagai guru ilmu komputer yang ramah di lingkungan Anda, saya disini untuk mengajarkan Anda dalam petualangan ini. percayalah, pada akhir pelajaran ini, Anda akan mengelola berkas seperti seorang profesional!

C++ Files and Streams

Membuka Berkas

Mari kita mulai dengan dasar-dasar. Bayangkan Anda memiliki rakit penyimpanan (itu adalah berkas kita) dan Anda perlu membukanya untuk either menaruh sesuatu di dalamnya atau mengambil sesuatu dari dalamnya. Di C++, kita menggunakan sesuatu yang disebut "stream" untuk berinteraksi dengan berkas.

Untuk membuka berkas, kita menggunakan kelas ifstream untuk membaca (input) dan kelas ofstream untuk menulis (output). Jika Anda ingin melakukan keduanya, Anda dapat menggunakan kelas fstream.

Berikut ini cara membuka berkas:

#include <fstream>
#include <iostream>
using namespace std;

int main() {
ofstream myFile("treasure.txt");

if (myFile.is_open()) {
cout << "Rakit penyimpanan sudah terbuka!" << endl;
} else {
cout << "Oh tidak! Kita tidak dapat membuka rakit penyimpanan." << endl;
}

return 0;
}

Dalam contoh ini, kita mencoba membuka berkas dengan nama "treasure.txt" untuk menulis. Fungsi is_open() memeriksa apakah berkas berhasil dibuka.

Menutup Berkas

Setelah kita selesai dengan rakit penyimpanan kita, baik (dan merupakan praktek yang baik) untuk menutupnya. Di C++, berkas secara otomatis ditutup saat objek stream berkas keluar dari lingkungan, tetapi lebih baik untuk menutupnya secara eksplisit:

myFile.close();

Menulis ke Berkas

Sekarang bahwa kita telah membuka rakit penyimpanan kita, mari kita taruh beberapa harta di dalamnya! Menulis ke berkas adalah semudah menggunakan operator <<:

ofstream myFile("treasure.txt");

if (myFile.is_open()) {
myFile << "Emas: 100" << endl;
myFile << "Tongkat ajaib: 3" << endl;
myFile << "Telur naga: 1" << endl;
cout << "Harta ditambahkan ke rakit penyimpanan!" << endl;
} else {
cout << "Gagal membuka rakit penyimpanan." << endl;
}

myFile.close();

Dalam contoh ini, kita menulis tiga baris ke berkas kita. Setiap << operator menulis teks berikut ke berkas, dan endl menambahkan baris baru.

Membaca dari Berkas

Membaca dari berkas adalah seperti mengambil inventaris rakit penyimpanan kita. Kita menggunakan kelas ifstream dan operator >> untuk membaca dari berkas:

#include <string>

ifstream myFile("treasure.txt");
string line;

if (myFile.is_open()) {
while (getline(myFile, line)) {
cout << line << endl;
}
myFile.close();
} else {
cout << "Tidak dapat membuka rakit penyimpanan." << endl;
}

Di sini, kita menggunakan getline() untuk membaca setiap baris dari berkas dan mencetaknya ke konsol. Perulangan while terus berlanjut sampai kita mencapai akhir berkas.

Contoh Baca dan Tulis

Mari kita gabungkan pembacaan dan penulisan dalam contoh yang lebih kompleks. Kita akan membuat program yang mengelola inventaris harta kita:

#include <fstream>
#include <iostream>
#include <string>
using namespace std;

int main() {
// Menulis ke berkas
ofstream outFile("inventory.txt");
if (outFile.is_open()) {
outFile << "Emas: 100" << endl;
outFile << "Tongkat ajaib: 3" << endl;
outFile << "Telur naga: 1" << endl;
outFile.close();
cout << "Inventaris disimpan!" << endl;
} else {
cout << "Tidak dapat menyimpan inventaris." << endl;
return 1;
}

// Membaca dari berkas
ifstream inFile("inventory.txt");
string item;
int count;

if (inFile.is_open()) {
cout << "Inventaris saat ini:" << endl;
while (inFile >> item >> count) {
cout << item << " " << count << endl;
}
inFile.close();
} else {
cout << "Tidak dapat membaca inventaris." << endl;
return 1;
}

return 0;
}

Dalam contoh ini, kita terlebih dahulu menulis inventaris kita ke berkas, kemudian membacanya kembali dan menampilkan itu. Perhatikan bagaimana kita menggunakan >> untuk membaca kata dan angka secara terpisah.

Penunjuk Posisi Berkas

Bayangkan Anda membaca sebuah buku dan ingin mengejar tempat Anda saat ini. Penunjuk posisi berkas melakukan hal yang sama untuk berkas. Mereka mengejar tempat kita di berkas.

Berikut beberapa fungsi yang berguna untuk bekerja dengan penunjuk posisi berkas:

Fungsi Deskripsi
tellg() Mengembalikan posisi saat ini dari penunjuk get (untuk input)
tellp() Mengembalikan posisi saat ini dari penunjuk put (untuk output)
seekg() Mengatur posisi penunjuk get
seekp() Mengatur posisi penunjuk put

Lihatlah contoh berikut:

#include <fstream>
#include <iostream>
using namespace std;

int main() {
fstream file("peta_harta.txt", ios::in | ios::out);

if (!file.is_open()) {
cout << "Gagal membuka peta harta!" << endl;
return 1;
}

// Menulis ke berkas
file << "X menandakan tempat itu!";

// Pindah ke awal berkas
file.seekg(0, ios::beg);

// Baca konten
string content;
getline(file, content);
cout << "Peta mengatakan: " << content << endl;

// Pindah 2 karakter dari awal
file.seekp(2, ios::beg);

// Timpa bagian konten
file << "tidak selalu menandakan";

// Pindah ke awal dan baca lagi
file.seekg(0, ios::beg);
getline(file, content);
cout << "Sekarang peta mengatakan: " << content << endl;

file.close();
return 0;
}

Dalam contoh ini, kita menulis ke berkas, kemudian membacanya, kemudian mengubah bagian dari konten, dan akhirnya membacanya lagi. Itu seperti kita memperbarui peta harta kita!

Dan itu untuk Anda, para penjelajah berani dunia C++! Anda telah belajar bagaimana membuka rakit penyimpanan (berkas), menyimpan harta Anda (menulis data), mengambil inventaris (membaca data), dan bahkan memperbarui peta harta Anda (mengubah isi berkas). Ingat, praktek membuat perfect, jadi terus kode dan jelajahi. Siapa tahu apa saja harta digital yang Anda temukan berikutnya? Happy coding!

Credits: Image by storyset