14. Fayllar bilan ishlash

Dastur ishlayotganda ma'lumotlar odatda xotirada saqlanadi.

Masalan:

int yosh = 18;

Lekin dastur yopilgandan keyin bu ma'lumot yo‘qolishi mumkin.

Agar ma'lumotni keyin ham ishlatmoqchi bo‘lsak, uni faylga saqlashimiz mumkin.

Masalan:

ism.txt

faylida:

Ali

degan ma'lumotni saqlash mumkin.

C tilida fayllar bilan ishlash uchun stdio.h kutubxonasidagi funksiyalardan foydalanamiz.


Fayl nima?

Fayl — kompyuterda ma'lumotlarni saqlash uchun ishlatiladigan joy.

Masalan:

ism.txt
talabalar.txt
natija.txt

Fayllarda matn, sonlar yoki boshqa ma'lumotlarni saqlash mumkin.


Fayl bilan ishlash bosqichlari

C tilida fayl bilan ishlaganda odatda quyidagi ishlarni qilamiz:

  1. Faylni ochamiz.
  2. Faylga ma'lumot yozamiz yoki undan o‘qiymiz.
  3. Faylni yopamiz.

Masalan:

faylni ochish
     ↓
ma'lumot bilan ishlash
     ↓
faylni yopish

FILE nima?

C tilida fayl bilan ishlash uchun FILE turidan foydalanamiz.

Masalan:

FILE *fayl;

Bu yerda fayl faylga murojaat qilish uchun ishlatiladi.


Faylni ochish

Faylni ochish uchun fopen() funksiyasidan foydalanamiz.

Masalan:

FILE *fayl = fopen("ism.txt", "w");

Bu yerda:

"ism.txt"

fayl nomi.

"w"

esa faylni yozish uchun ochish rejimi.


Faylga yozish

Faylga ma'lumot yozish uchun fprintf() funksiyasidan foydalanish mumkin.

Masalan:

#include <stdio.h>

int main() {
    FILE *fayl = fopen("ism.txt", "w");

    fprintf(fayl, "Ali");

    fclose(fayl);

    return 0;
}

Dastur ishlagandan keyin ism.txt fayli yaratiladi.

Unda:

Ali

matni bo‘ladi.


fclose() nima qiladi?

Fayl bilan ishlash tugagach, uni yopish kerak.

Buning uchun:

fclose(fayl);

ishlatiladi.

Shuning uchun odatda:

fopen()

bilan ochamiz.

Keyin:

fprintf()

bilan yozamiz.

Oxirida:

fclose()

bilan yopamiz.


Faylni ochish rejimlari

fopen() ikkinchi parametr orqali fayl qanday ishlatilishini belgilaydi.

Eng muhim rejimlar:

Rejim Vazifasi
"w" Faylga yozish
"r" Fayldan o‘qish
"a" Fayl oxiriga qo‘shish

Hozircha shu uchta rejimni bilish kifoya.


"w" rejimi

"w" faylga yozish uchun ishlatiladi.

Masalan:

FILE *fayl = fopen("test.txt", "w");

Keyin:

fprintf(fayl, "Salom");

Faylda:

Salom

bo‘ladi.

Agar fayl mavjud bo‘lmasa, C uni yaratishi mumkin.

Agar mavjud bo‘lsa, "w" rejimi eski ma'lumotlarni o‘chirib, yangidan yozishi mumkin.

Shuning uchun "w" bilan ehtiyot bo‘lish kerak.


"a" rejimi

"a" fayl oxiriga yangi ma'lumot qo‘shish uchun ishlatiladi.

Masalan, faylda:

Salom

bo‘lsa:

FILE *fayl = fopen("test.txt", "a");

fprintf(fayl, "\nYangi matn");

natijada:

Salom
Yangi matn

bo‘ladi.

Eski ma'lumot saqlanib qoladi.


"r" rejimi

"r" fayldan o‘qish uchun ishlatiladi.

Masalan, test.txt faylida:

Salom

bo‘lsin.

Quyidagi dastur fayldagi ma'lumotni o‘qiydi:

#include <stdio.h>

int main() {
    FILE *fayl = fopen("test.txt", "r");

    char matn[100];

    fscanf(fayl, "%99s", matn);

    printf("%s", matn);

    fclose(fayl);

    return 0;
}

Natija:

Salom

Fayl ochilganini tekshirish

Faylni ochishda xatolik yuz berishi mumkin.

Shuning uchun fayl ochilganini tekshirish yaxshi odat.

Masalan:

FILE *fayl = fopen("test.txt", "r");

if (fayl == NULL) {
    printf("Faylni ochib bo'lmadi.");
    return 1;
}

Agar fayl ochilmasa, fopen() NULL qaytarishi mumkin.


Faylga bir nechta ma'lumot yozish

Masalan:

#include <stdio.h>

int main() {
    FILE *fayl = fopen("talaba.txt", "w");

    if (fayl == NULL) {
        printf("Faylni ochib bo'lmadi.");
        return 1;
    }

    fprintf(fayl, "Ali\n");
    fprintf(fayl, "17\n");
    fprintf(fayl, "90\n");

    fclose(fayl);

    return 0;
}

Faylda:

Ali
17
90

bo‘ladi.


Fayldan bir nechta qiymat o‘qish

Fayldan ma'lumotni fscanf() yordamida o‘qish mumkin.

Masalan, faylda:

Ali 17

bo‘lsin.

Dastur:

#include <stdio.h>

int main() {
    FILE *fayl = fopen("talaba.txt", "r");

    char ism[20];
    int yosh;

    fscanf(fayl, "%19s %d", ism, &yosh);

    printf("Ism: %s\n", ism);
    printf("Yosh: %d\n", yosh);

    fclose(fayl);

    return 0;
}

Natija:

Ism: Ali
Yosh: 17

fputs() va fgets()

Matn yozish va o‘qish uchun yana ikkita foydali funksiya bor:

fputs()

va:

fgets()

fputs() faylga matn yozadi.

Masalan:

fputs("Salom\n", fayl);

fgets() esa fayldan matn o‘qiydi.

Masalan:

char matn[100];

fgets(matn, 100, fayl);

Hozircha fprintf() va fscanf() bilan ishlashni yaxshi tushunib olish kifoya.


Fayl bilan ishlashning to‘liq misoli

Keling, faylga ism yozamiz.

#include <stdio.h>

int main() {
    FILE *fayl = fopen("ism.txt", "w");

    if (fayl == NULL) {
        printf("Faylni ochib bo'lmadi.");
        return 1;
    }

    fprintf(fayl, "Husan");

    fclose(fayl);

    return 0;
}

Dastur ishlagandan keyin:

ism.txt

fayli ichida:

Husan

bo‘ladi.


Faylni o‘qish

Endi shu faylni o‘qiymiz.

#include <stdio.h>

int main() {
    FILE *fayl = fopen("ism.txt", "r");

    if (fayl == NULL) {
        printf("Faylni ochib bo'lmadi.");
        return 1;
    }

    char ism[50];

    fscanf(fayl, "%49s", ism);

    printf("Ism: %s", ism);

    fclose(fayl);

    return 0;
}

Natija:

Ism: Husan

Faylga yozish va o‘qish

Fayllardan foydalanib ma'lumotni dastur yopilgandan keyin ham saqlashimiz mumkin.

Masalan:

Dastur
   ↓
ma'lumot
   ↓
fayl
   ↓
dastur qayta ishga tushadi
   ↓
fayldan ma'lumot o‘qiladi

Bu oddiy dasturlarda ma'lumotlarni saqlash uchun foydali.


Amaliy mashqlar

1-mashq

test.txt nomli fayl yarating va unga:

Salom, C!

matnini yozing.


2-mashq

Foydalanuvchidan ism oling va uni faylga saqlang.

Masalan:

Ism: Ali

Keyin faylda:

Ali

bo‘lsin.


3-mashq

Fayldagi ismni o‘qing va ekranga chiqaring.

Masalan:

Ism: Ali

4-mashq

Faylga uchta son yozing:

10
20
30

Keyin ularni fayldan o‘qing.


5-mashq

Faylga bir nechta ism yozing.

Masalan:

Ali
Vali
Hasan

Keyin ularni o‘qib, ekranga chiqaring.


Muhim narsalarni eslab qoling

Fayl bilan ishlash uchun:

#include <stdio.h>

Fayl ochish:

FILE *fayl = fopen("test.txt", "w");

Faylga yozish:

fprintf(fayl, "Salom");

Fayldan o‘qish:

fscanf(fayl, "%s", matn);

Faylni yopish:

fclose(fayl);

Eng ko‘p ishlatiladigan rejimlar:

"w" → yozish
"r" → o‘qish
"a" → oxiriga qo‘shish

Xulosa

Fayllar yordamida dasturdagi ma'lumotlarni saqlashimiz mumkin.

Asosiy jarayon:

fopen()
   ↓
ma'lumot bilan ishlash
   ↓
fclose()

Fayllar katta dasturlarda ma'lumotlarni saqlashning muhim usullaridan biridir.