Fail dan Strim C++

Halo, pemrogram masa depan! Hari ini, kita akan melakukan perjalanan yang menarik ke dunia fail dan strim C++. Sebagai guru sains komputer yang ramah dan penyayang, saya di sini untuk memandu anda melalui petualangan ini. percayalah, pada akhir pelajaran ini, anda akan menguruskan fail seperti seorang profesional!

C++ Files and Streams

Membuka Fail

Mari kita mulakan dengan asas. Bayangkan anda memiliki rakuten (itu adalah fail kita) dan anda perlu untuk membukanya untuk meletakkan sesuatu di dalamnya atau mengambil sesuatu darinya. Dalam C++, kita menggunakan satu perkhidmatan yang dipanggil "strim" untuk berinteraksi dengan fail.

Untuk membuka fail, kita gunakan kelas ifstream untuk membaca (input) dan kelas ofstream untuk menulis (output). Jika anda mahu melakukan kedua-duanya, anda boleh gunakan kelas fstream.

Berikut adalah cara untuk membuka fail:

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

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

if (myFile.is_open()) {
cout << "Rakuten terbuka!" << endl;
} else {
cout << "Oh tidak! Kita tidak dapat membuka rakuten." << endl;
}

return 0;
}

Dalam contoh ini, kita cuba untuk membuka fail bernama "treasure.txt" untuk menulis. Fungsi is_open() memeriksa jika fail telah berhasil dibuka.

Menutup Fail

Setelah kita selesai dengan rakuten kita, adalah elok (dan adalah praktek yang baik) untuk menutupnya. Dalam C++, fail secara automatik ditutup apabila objek strim fail keluar dari lingkungan, tetapi adalah lebih baik untuk menutupnya secara eksplisit:

myFile.close();

Menulis ke Fail

Sekarang bahwa kita telah membuka rakuten kita, mari kita letakkan beberapa harta di atasnya! Menulis ke fail adalah mudah seperti menggunakan operator <<:

ofstream myFile("treasure.txt");

if (myFile.is_open()) {
myFile << "emas koin: 100" << endl;
myFile << "tongkat penyihir: 3" << endl;
myFile << "telur naga: 1" << endl;
cout << "Harta ditambahkan ke rakuten!" << endl;
} else {
cout << "Gagal untuk membuka rakuten." << endl;
}

myFile.close();

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

Membaca dari Fail

Membaca dari fail adalah seperti mengambil inventori rakuten kita. Kita gunakan kelas ifstream dan operator >> untuk membaca dari fail:

#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 rakuten." << endl;
}

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

Contoh Baca dan Tulis

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

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

int main() {
// Menulis ke fail
ofstream outFile("inventory.txt");
if (outFile.is_open()) {
outFile << "emas koin: 100" << endl;
outFile << "tongkat penyihir: 3" << endl;
outFile << "telur naga: 1" << endl;
outFile.close();
cout << "Inventori disimpan!" << endl;
} else {
cout << "Tidak dapat menyimpan inventori." << endl;
return 1;
}

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

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

return 0;
}

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

Penunjuk Posisi Fail

Bayangkan anda membaca buku dan anda ingin untuk melacak di mana anda berada. Penunjuk posisi fail melakukan hal yang sama untuk fail. Mereka melacak di mana kita berada di fail.

Berikut adalah beberapa fungsi yang berguna untuk bekerja dengan penunjuk posisi fail:

Fungsi Keterangan
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

Mari kita lihat contoh:

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

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

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

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

// Pindahkan ke awal fail
file.seekg(0, ios::beg);

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

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

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

// Pindahkan 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 fail, kemudian membacanya, kemudian mengubah sebahagian darinya, dan akhirnya membacanya lagi. Itu seperti kita mengupdate peta harta kita!

Dan itu untuk anda, penyelamat penyelamatan dunia C++! Anda telah belajar bagaimana untuk membuka rakuten (fail), menyimpan harta anda (menulis data), mengambil inventori (membaca data), dan juga mengupdate peta harta anda (mengubah isi fail). Ingat, praktek membuat perfect, jadi terus untuk mengkoding dan penyelamatan. Siapa tahu apa yang harta digital anda akan temukan berikutnya? Happy coding!

Credits: Image by storyset