File system

C++ da fayl tizimi (File system)

C++ da fayl tizimi (File system in C++)

Fayllarni qayta ishlash dasturlashning muhim jihati bo'lib, dasturlarga fayllarda saqlangan ma'lumotlarni olish va boshqarish imkonini beradi. C++ dasturlash tilida ushbu amaliyotlar <fstream> standart kutubxonasi tomonidan amalga oshiriladi. C++ da fayllar ma’lumotlar oqimi sifatida ko‘riladi. C++ fayllar bilan ishlashda uchta fayl oqimini taqdim qiladi:

  • ifstream - Fayldan ma’lumotlarni o’qish
  • ofstream - Faylga ma’lumot yozish
  • fstream - Yuqoridagi ikkita oqimning kombinatsiyalashgan turi

Fayllar bilan ishlashdan avval ushbu kutubxonani dasturimizga chaqirib olish talab etiladi:

#include <iostream>
#include <fstream>

Fayl ochish va yopish

C++ da fayl ochish quidagicha amalga oshiriladi.

#include <iostream>
#include <fstream>
using namespace std;
 
int main() {
    ofstream fayl; // fayl obyektini hosil qilish
    fayl.open("example.txt");  // example.txt faylini hosil qilish
 
    // is_open() methodi yordamida fayl muvofaqiatli ochilgan yoki ochilmaganini tekshirish
    if (fayl.is_open()) {
        // Agar fayl muvofaqiatli ochilgan bo'lsa unga "Assalomu alaykum!!!" matnini yozish
        fayl << "Assalomu alaykum!!!" << endl;
        // Yozish amali yakuniga yetganidan so'ng faylni yopish
        fayl.close();
    } else {
        // fayl muvofaqiatli ochilmaganda foydalanuvchini ogohlantirish
        cout << "Faylni ochishni imkoni bo'lmadi" << endl;
    }
    return 0;
}

Yuqorida ofstream oqimidan foydalangan holda fayl hosil qilib unga “Assalomu alaykum!!!” matnini yozishga erishdik.

Fayldan ma’lumotlarni o’qish

Yuqorida fayl hosil qilib unga ma’lumot yozish dasturini ko’rdik. Endi esa o’sha fayldagi ma’lumotlarni o’qishni ya’ni ekranga chiqarish dasturini yozib ko’ramiz.

#include <iostream>
#include <fstream>
 
using namespace std;
 
int main() {
    ifstream fayl("example.txt");  // ifstream yordamida faylmizni o'qish uchun ochish
    string qator;
 
    if (fayl.is_open()) {
        while (getline(fayl, qator)) {  // qatorlab ekranga chop qilish
            cout << qator << endl;
        }
        fayl.close();  // faylni yopish
    } else {
        cout << "Faylni ochishni imkoni bo'lmadi" << endl;
    }
    return 0;
}

Ushbu dasturimizda getline() funksiyamizdan foydalandik. Esingizda bo’lsa undan avval ham foydalanuvchidan ma’lumot olishda foydalangan edik.

while sikli faylning oxirigacha davom etadi getline() funksiyamz bir vaqtning o’zida fayldan bir qatorni o’qib qator o’zgaruvchisiga saqlaydi. cout funksiyamiz esa ushbu qatorni ekranga chop qiladi.

Faylga ma’lumot qo’shish

Yuqoridagi faylga yozish dasturi har safar fayl kontentini yangidan yozadi ya’ni birinchi foydalanishda “Assalomu alaykum!!!” matnini faylga yozib keyingi foydalanishda boshqa matn kiritilsa dastur birinchi foydalanishda yozilgan kontentni o’chirib o’rniga yangi kontentni yozadi. Agar bizga faylni eski kontentini saqlagan holda ma’lumot qo’shish kerak bo’lsachi?

Ushbu holatda biz ios::app yorlig’iga murojaat qilishimiz kerak bo’ladi ya’ni faylimizni append mode (qo’shish rejimi) da ochish uchun.

#include <iostream>
#include <fstream>
using namespace std;
 
int main() {
    ofstream fayl("example.txt", ios::app);  // faylni qo'shish rejimida ochish
    if (fayl.is_open()) {
        fayl << "fayldagi yangi qator" << endl;
	      fayl .close();
    } else {
        cout << "Faylni ochishni imkoni bo'lmadi" << endl;
    }
    return 0;
}

Yuqoridagi yorliqlar odatda fstream kutubxonasi bilan birga foydalaniladi va ularni bir necha turlari mavjud. Yuqorida aytib o’tganimizdek fstream kutubxonasi ikki kutubxonani umumlashtirilgan varianti hisoblanib kutubxonadan foydalanishda bunday yorliqlardan foydalaniladi.

  • ios::app - faylni qo’shish rejimida ochish
  • ios::in - faylni o’qish uchun ochish
  • ios::out - faylga yozish uchun ochish
  • ios::trunc - fayl mavjud bo’lganda yozishdan oldin uni kontentini tozalaydi.

Agar bir vaqtning o’zida faylga yozib ham undagi ma’lumotlarni o’qish uchun dastur yozmoqchi bo’lsak bu usul bizga qo’l keladi.

#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main() {
    // 1. faylni yozish va o'qish uchun ochish
    fstream fayl("example.txt", ios::in | ios::out | ios::app );
 
    // faylni ochishni imkoni bo'magan holatlarni tekshirish
    if (!fayl.is_open()) {
        cout << "Faylni ochishni imkoni bo'lmadi" << endl;
        return 1;
    }
 
    // 2. fayl muvofaqiatli ochilganda unga yangi kontentni yozish
    fayl << "Salom, bu yangi fayl!" << endl;
    fayl << "Bu ikkinchi qator." << endl;
 
    // 3. fayl kursorini boshlang'ich nuqtaga qaytarish
    fayl.seekg(0);  // ushbu holat faylni boshidan o'qish uchun muhim hisoblanadi
 
 
 
    // 4. faylni o'qish
    string qator;
    cout << "Fayldan o'qilgan ma'lumotlar:" << endl;
    while (getline(fayl, qator)) {
        cout << qator << endl;
    }
 
    // 5. barcha amallar bajarilganidan so'ng faylni yopish
    fayl.close();
 
    return 0;
}

seekg() funksiyasi kursorning boshlang’ich pozitsiyasini belgilaydi. Agar biz seekg() funksiyasiga 6 qiymatini beradigan bo’lsak u holda dasturimiz faylning 6 elementidan boshlab o’qishni boshlaydi. Bizning holatimizda fayldagi “Salom,” so’zini tashlab ketadi va ekranga quidagicha natija chiqadi.

bu yangi fayl!
Bu ikkinchi qator.

Mustaqil ravishda fstream kutubxonasining boshqa funksiyalari haqida o’rganishga harakat qilib ko’ring va foydalanuvchidan ma’lumot olib uni faylga yozish dasturini mashq yozishga harakat qilib ko’ring!

Ushbu sahifada

Xato haqida xabar berish