C++ fayllar bilan ishlash
C++ tilida fayllar bilan ishlash - bu faylda o'qish/yozish amallarini yaratish va bajarish mexanizmi.
<fstream> sinfini import qilish orqali biz C++ da turli xil fayllar bilan ishlash usullariga kirishimiz mumkin.
#include <fstream>
<fstream> includes two classes for file handling:
ifstream - to read from a file.ofstream - to create/open and write to a file.[!NOTE] Bizning onlayn kompilyatorimiz hozirda fayllar bilan ishlashni boshqara olmaydi. Shunday qilib, bu erda keltirilgan dasturlarni ishga tushirish uchun kompyuteringizga IDE yoki matn muharririni o'rnating.
Fayllar bilan ishlash uchun avvalo ularni ochishimiz kerak. C++ da faylni ofstream va ifstream sinflari yordamida ochishimiz mumkin.
Masalan, ofstream yordamida faylni qanday ochishimiz mumkin:
std::ofstream my_file("example.txt");
Bu yerga,
-my_file - ofstream sinfi ob'ektining nomi.
-example.txt - biz ochmoqchi bo'lgan faylning nomi va kengaytmasi.
[!NOTE] Faylni ochish uchun
open()funksiyasidan ham foydalanishimiz mumkin. Masalan,std::ofstream my_file.open("example.txt");
Fayl bilan ishlashni tugatgandan so'ng, biz uni close() funksiyasidan foydalanib yopishimiz kerak.
my_file.close();
Ushbu operatsiyalarni ko'rib chiqish uchun dastur misolini olaylik.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// yozish uchun matn faylini ochish
ofstream my_file("example.txt");
// faylni yoping
my_file.close();
return 0;
}
Ushbu kod example.txt faylini ochadi va yopadi.
[!NOTE] If there's no such file to open,
ofstream my_file("example.txt");will instead create a new file namedexample.txt.
Fayllarni qayta ishlashda fayl ustida boshqa amallarni bajarishdan oldin uning xatosiz ochilganligiga ishonch hosil qilish muhimdir.Fayllarda xatoliklarni tekshirishning uchta umumiy usuli mavjud:
ofstream my_file("example.txt");
// fayl to'g'ri ochilganligini tekshiring
if (!my_file) {
// chop etish xato xabari
cout << "Error opening the file." << endl;
// main() funksiyasini tugatish
return 1;
}
if operatoridagi shartga e'tibor bering:
if (!my_file) {...}
Ushbu usul fayl ob'ektining o'zini baholash orqali fayl xato holatida yoki yo'qligini tekshiradi.
true ga baholanadi.false ga baholanadi va siz xatoni shunga mos ravishda hal qilishingiz mumkin.is_open() funksiyasi qaytadi
Masalan,
ofstream my_file("example.txt");
if (!my_file.is_open()) {
cout << "Error opening the file." << endl;
return 1;
}
fail() funksiyasi qaytadi
ofstream my_file("example.txt");
if (my_file.fail()) {
cout << "Error opening the file." << endl;
return 1;
}
[!NOTE] Oddiylik uchun birinchi usuldan foydalanishni tavsiya etamiz.
Matnli fayllardan o'qish faylni ifstream sinfi yordamida ochish orqali amalga oshiriladi. Masalan,
ifstream my_file("example.txt");
Keyin, biz faylni satrga o'qishimiz kerak. Buni amalga oshirish uchun biz faylning har bir satri bo'ylab barcha satrlar o'qilmaguncha, ya'ni faylning oxiriga yetguncha aylanishimiz kerak.
Biz bu maqsadda eof() funksiyasidan foydalanamiz, bu esa qaytaradi
Masalan,
// fayl mazmunini saqlash uchun o'zgaruvchi
string line;
// faylning oxirigacha sikl
while (!my_file.eof()) {
// faylning joriy qatorini saqlang
// "chiziq" o'zgaruvchisida
getline(my_file, line);
// chiziq o'zgaruvchisini chop eting
cout << line << endl;
}
Bu erda while sikli faylning oxirigacha ishlaydi. Loopning har bir iteratsiyasida,
-getline(my_file, line); faylning joriy satrini o'qiydi va uni satr o'zgaruvchisida saqlaydi.
Keyinchalik, buni ishlaydigan misol bilan aniqlab olaylik.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// o'qish uchun matn faylini oching
ifstream my_file("example.txt");
// faylni xatolar uchun tekshiring
if(!my_file) {
cout << "Error: Unable to open the file." << endl;
return 1;
}
// fayl mazmunini "satr" qatorida saqlang
string line;
// matn faylining oxirigacha sikl
while (!my_file.eof()) {
// faylning joriy qatorini saqlang
// "chiziq" o'zgaruvchisida
getline(my_file, line);
// chiziq o'zgaruvchisini chop eting
cout << line << endl;
}
// faylni yoping
my_file.close();
return 0;
}
example.txt quyidagi matnni o'z ichiga oladi deylik:
Contents of example.txt

Keyin terminalimiz quyidagi chiqishni chop etadi:
Hello, World!
How are you?
Biz faylga yozish uchun ofstream sinfidan foydalanamiz. Masalan,
ofstream my_file("example.txt");
Keyin faylga << kiritish operatoridan foydalanib, ofstream my_file obyekti bilan yozishimiz mumkin. Masalan,
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// yozish uchun matn faylini oching
ofstream my_file("example.txt");
// faylni xatolar uchun tekshiring
if(!my_file) {
cout << "Error: Unable to open the file." << endl;
return 1;
}
// faylga bir nechta qatorlarni yozing
my_file << "Line 1" << endl;
my_file << "Line 2" << endl;
my_file << "Line 3" << endl;
// faylni yoping
my_file.close();
return 0;
}
Faylga yozish uchun quyidagi kodga e'tibor bering:
my_file << "Line 1" << endl;
my_file << "Line 2" << endl;
my_file << "Line 3" << endl;
Bu ekranga chop etish chiqishiga o'xshaydi:
cout << "Line1" << endl;
Fayllarni qayta ishlashda biz konsol o'rniga faylga yozish uchun cout ni fayl obyekti bilan almashtiramiz.
Bizning maxsus kodimiz example.txt ga quyidagi matnni yozadi:
Line1
Line2
Line3
[!NOTE] Mavjud faylga yozish faylning mavjud mazmunini qayta yozadi.
Faylning mavjud tarkibiga qo'shish/qo'shish uchun faylni qo'shish rejimida ochishingiz kerak.
C++ da faylni ochishda ios::app bayrog'i yordamida bunga erishishingiz mumkin:
ofstream my_file("example.txt", ios::app);
Keling, example.txt ning mavjud tarkibiga yana bir nechta matn qo'shamiz:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// qo'shish uchun matn faylini oching
ofstream my_file("example.txt", ios::app);
// agar fayl muvaffaqiyatli ochilmasa, xato xabarini chop eting
if(!my_file) {
cout << "Failed to open the file for appending." << endl;
return 1;
}
// faylga bir nechta qatorlarni qo'shing
my_file << "Line 4" << endl;
my_file << "Line 5" << endl;
my_file << "Line 6" << endl;
// faylni yoping
my_file.close();
return 0;
}
Bu example.txt ga quyidagi qatorlarni qo'shadi:
Line 4
Line 5
Line 6
Contents Appended to an Existing File

Fayldan o'qish uchun ifstream va faylga yozish uchun ofstream dan foydalanish o'rniga, biz barcha fayl operatsiyalari uchun fstream sinfidan foydalanishimiz mumkin.
fstream konstruktori fayl nomi va fayl operatsiyalari rejimini belgilash imkonini beradi.
Rejim tavsifi ios::in O'qish uchun faylni ochadi ( ifstream uchun standart). ios::out Yoziladigan faylni ochadi ( ofstream uchun standart). ios::app Faylni ochadi va oxirida unga yangi tarkib qo'shadi.
Keling, bir misolni ko'rib chiqaylik:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// 1. matn fayliga yozish
fstream my_file("example.txt", ios::out);
if (my_file) {
my_file << "This is a test line." << endl;
my_file.close();
}
else {
cout << "Unable to open file for writing." << endl;
return 1;
}
// 2. xuddi shu fayldan o'qing
string line;
my_file.open("example.txt", ios::in);
if (my_file) {
while (!my_file.eof()) {
getline(my_file, line);
cout << "Read from file: " << line << endl;
}
my_file.close();
}
else {
cout << "Unable to open file for reading." << endl;
return 1;
}
// 3. fayl oxiriga ma'lumotlarni qo'shish
my_file.open("example.txt", ios::app);
if (my_file) {
my_file << "This is another test line, appended to the file." << endl;
my_file.close();
}
else {
cout << "Unable to open file for appending." << endl;
return 1;
}
return 0;
}
Chiqish
Read from file: This is a test line.
Read from file:
Agar dasturni ishga tushirgandan so'ng faylni ko'rib chiqsak, biz quyidagi tarkibni topamiz:
File Handling Using fstream

[!NOTE]
ifstreamvaofstreamdan foydalanish, mos ravishda o'qish yoki yozish niyatini aniq bildiradi, bu kodni yanada o'qilishi mumkin va xatolarga kamroq moyil bo'ladi. Ikkalasi uchunfstreamdan foydalanish, agar ehtiyotkorlik bilan foydalanilmasa, noaniqlik yoki kutilmagan operatsiyalarga olib kelishi mumkin.