Binar fayillar bilan ishlash

Fayllar bilan ishlash dasturlashda ma'lumotlarni tashqi fayllarga saqlash yoki o'qish uchun muhim hisoblanadi. Bu jarayon matnli va binar fayllar bilan farq qiladi. Quyida matnli va binar fayllar bilan ishlashning nazariy qismi va GCC orqali ishlashni tushuntiruvchi amaliy misollar keltirilgan.

1. Matnli fayllar bilan ishlash

Matnli fayllar odatda inson o'qiy oladigan harflar, raqamlar va boshqa belgilarni o'z ichiga oladi. Biz ushbu fayllarga ma'lumotlarni yozish va o'qish uchun fprintf, fscanf kabi funksiyalardan foydalanamiz.

Nazariy ma'lumotlar:

  • fopen: Faylni ochish uchun ishlatiladi. Misol: fopen("file.txt", "r");

    • "r" - Faqat o'qish uchun faylni ochish.

    • "w" - Faylni yozish uchun ochish (agar fayl mavjud bo'lmasa, yaratiladi).

    • "a" - Fayl oxiridan yozishni davom ettirish.

  • fclose: Faylni yopish uchun ishlatiladi. fclose(fayl_ko'rsatgich);

  • fprintf: Faylga ma'lumot yozish uchun ishlatiladi. fprintf(fayl_ko'rsatgich, format, qiymatlar);

  • fscanf: Fayldan ma'lumot o'qish uchun ishlatiladi. fscanf(fayl_ko'rsatgich, format, qiymatlar);

Amaliy misol:

Misol 1: Matnli faylga yozish va o'qish

#include <stdio.h>

int main() {
    FILE *fptr;
    
    // Faylni yozish uchun ochamiz
    fptr = fopen("matnli_fayl.txt", "w");
    if (fptr == NULL) {
        printf("Faylni ochishda xatolik yuz berdi!");
        return 1;
    }
    
    // Faylga ma'lumot yozamiz
    fprintf(fptr, "Salom, bu matnli faylga yozilgan ma'lumotdir.\n");
    fprintf(fptr, "Biz fayllar bilan ishlashni o'rganmoqdamiz!\n");
    
    // Faylni yopamiz
    fclose(fptr);
    
    // Faylni o'qish uchun ochamiz
    fptr = fopen("matnli_fayl.txt", "r");
    if (fptr == NULL) {
        printf("Faylni ochishda xatolik yuz berdi!");
        return 1;
    }
    
    // Fayldan ma'lumot o'qiymiz va ekranga chiqaramiz
    char satr[100];
    while (fgets(satr, 100, fptr) != NULL) {
        printf("%s", satr);
    }
    
    // Faylni yopamiz
    fclose(fptr);

    return 0;
}

Tushuntirish:

  • Fayl "matnli_fayl.txt" ochiladi va ma'lumotlar yoziladi.

  • Keyin faylni o'qib, ekranga chiqarish uchun ochamiz va ma'lumotlarni satrma-satr o'qiymiz.

2. Binar fayllar bilan ishlash

Binar fayllar ma'lumotlarni baytlar ko'rinishida saqlaydi. Ushbu fayllar inson uchun tushunarli bo'lmaydi, lekin kompyuter uchun ma'lumotlarni saqlashda samarali.

Nazariy ma'lumotlar:

  • fwrite: Binar faylga yozish uchun ishlatiladi. fwrite(ko'rsatgich, element_o'lchami, element_soni, fayl_ko'rsatgich);

  • fread: Binar fayldan ma'lumot o'qish uchun ishlatiladi. fread(ko'rsatgich, element_o'lchami, element_soni, fayl_ko'rsatgich);

Amaliy misol:

Misol 2: Binar faylga yozish va o'qish

#include <stdio.h>

struct Student {
    char name[50];
    int age;
};

int main() {
    FILE *fptr;
    struct Student student = {"Ali", 20};
    
    // Binar faylni yozish uchun ochamiz
    fptr = fopen("binar_fayl.bin", "wb");
    if (fptr == NULL) {
        printf("Faylni ochishda xatolik yuz berdi!");
        return 1;
    }
    
    // Binar faylga ma'lumot yozamiz
    fwrite(&student, sizeof(struct Student), 1, fptr);
    
    // Faylni yopamiz
    fclose(fptr);
    
    // Binar faylni o'qish uchun ochamiz
    fptr = fopen("binar_fayl.bin", "rb");
    if (fptr == NULL) {
        printf("Faylni ochishda xatolik yuz berdi!");
        return 1;
    }
    
    struct Student read_student;
    
    // Fayldan ma'lumot o'qiymiz
    fread(&read_student, sizeof(struct Student), 1, fptr);
    
    // Ma'lumotni ekranga chiqaramiz
    printf("Ismi: %s, Yoshi: %d\n", read_student.name, read_student.age);
    
    // Faylni yopamiz
    fclose(fptr);

    return 0;
}

Tushuntirish:

  • struct Student ma'lumot tuzilmasi binar faylga yoziladi va keyin o'qib olinadi.

  • fwrite funksiyasi binar faylga yozish uchun, fread esa o'qish uchun ishlatiladi.

GCC orqali fayllar bilan ishlash

Siz ushbu kodlarni GCC orqali ishlatishingiz mumkin. Buning uchun quyidagi buyruqlarni ishlatishingiz kerak:

  1. Matnli fayl bilan ishlash uchun:

    gcc matnli_fayl.c -o matnli_fayl
    ./matnli_fayl
  2. Binar fayl bilan ishlash uchun:

    gcc binar_fayl.c -o binar_fayl
    ./binar_fayl
  • Matnli fayllar uchun fprintf, fscanf kabi funksiyalar ishlatiladi.

  • Binar fayllar uchun esa fwrite, fread funksiyalari ishlatiladi.

  • Fayllarni ishlatgandan keyin har doim fclose funksiyasi yordamida yopish kerak.

Binar fayllar bilan ishlash odatda raqamli ma'lumotlarni yoki tuzilmalarni bayt ko'rinishida yozish va o'qish jarayonlarini o'z ichiga oladi. Binar fayllar inson o'qiy oladigan matn emas, balki kompyuter uchun o'qiladigan raqamli ko'rinishdagi ma'lumotlarni saqlash uchun ishlatiladi. Bu turdagi fayllar, masalan, tasvirlar, videolar, ovoz fayllari yoki ma'lumotlar tuzilmalari bo'lishi mumkin.

1. Binar fayllar bilan ishlash

Binar fayllar baytli ko'rinishdagi ma'lumotlarni saqlaydi. Bu fayllar matnli fayllardan farqli o'laroq inson tomonidan to'g'ridan-to'g'ri o'qilishi qiyin, ammo kompyuter ushbu fayllardan samarali foydalanishi mumkin.

Nazariy ma'lumotlar:

  • fopen: Faylni ochish uchun ishlatiladi. Binar fayllarni ochishda "rb", "wb", "ab" rejimlari ishlatiladi.

    • "rb" - Faylni binar formatda o'qish uchun ochish.

    • "wb" - Binar formatda faylni yozish uchun ochish (mavjud fayl o'chirilib, yangisi yaratiladi).

    • "ab" - Fayl oxiridan yozish uchun binar formatda ochish.

  • fwrite: Faylga binar ma'lumot yozish uchun ishlatiladi. fwrite(ko'rsatgich, element_o'lchami, element_soni, fayl_ko'rsatgich);

    • ko'rsatgich - yoziladigan ma'lumot joylashgan xotira manzili.

    • element_o'lchami - yoziladigan har bir elementning o'lchami.

    • element_soni - yoziladigan elementlar soni.

    • fayl_ko'rsatgich - fayl ochilganda qaytarilgan ko'rsatgich.

  • fread: Fayldan binar ma'lumot o'qish uchun ishlatiladi. fread(ko'rsatgich, element_o'lchami, element_soni, fayl_ko'rsatgich);

    • ko'rsatgich - o'qilgan ma'lumot saqlanadigan xotira manzili.

    • element_o'lchami - o'qiladigan har bir elementning o'lchami.

    • element_soni - o'qiladigan elementlar soni.

    • fayl_ko'rsatgich - fayl ochilganda qaytarilgan ko'rsatgich.

Amaliy misol:

Misol 1: Binar faylga yozish va o'qish

Quyida oddiy ma'lumotlar tuzilmasini binar faylga yozish va keyinchalik o'qish amaliyoti ko'rsatilgan.

#include <stdio.h>

struct Student {
    char name[50];
    int age;
    float grade;
};

int main() {
    FILE *fptr;
    struct Student student = {"Javohir", 22, 4.5};
    
    // Binar faylni yozish uchun ochamiz
    fptr = fopen("student_data.bin", "wb");
    if (fptr == NULL) {
        printf("Faylni ochishda xatolik yuz berdi!");
        return 1;
    }
    
    // Binar faylga ma'lumot yozamiz
    fwrite(&student, sizeof(struct Student), 1, fptr);
    
    // Faylni yopamiz
    fclose(fptr);
    
    // Binar faylni o'qish uchun ochamiz
    fptr = fopen("student_data.bin", "rb");
    if (fptr == NULL) {
        printf("Faylni ochishda xatolik yuz berdi!");
        return 1;
    }
    
    struct Student read_student;
    
    // Fayldan ma'lumot o'qiymiz
    fread(&read_student, sizeof(struct Student), 1, fptr);
    
    // O'qilgan ma'lumotni ekranga chiqaramiz
    printf("Ism: %s\nYosh: %d\nBahosi: %.2f\n", read_student.name, read_student.age, read_student.grade);
    
    // Faylni yopamiz
    fclose(fptr);

    return 0;
}

Tushuntirish:

  1. struct Student nomli ma'lumot tuzilmasi yaratiladi, bu ma'lumotlar tuzilmasi talabaning ismi, yoshi va bahosini saqlaydi.

  2. fopen yordamida binar fayl yozish uchun ochiladi ("wb" rejimi), va fwrite yordamida ma'lumotlar binar faylga yoziladi.

  3. Fayl yopiladi va keyin binar formatda o'qish uchun ochiladi ("rb" rejimi).

  4. fread yordamida fayldan ma'lumot o'qilib, ekranga chiqariladi.

2. Binar fayllarni qo'llashda afzalliklar va kamchiliklar:

Afzalliklari:

  • Katta hajmdagi ma'lumotlar: Binar fayllar katta hajmdagi ma'lumotlarni tezroq va samaraliroq yozish va o'qish imkoniyatini beradi.

  • Xotira tejamkorligi: Matnli fayllarga nisbatan binar fayllar ko'proq xotirani tejaydi, chunki ma'lumotlar bayt ko'rinishida saqlanadi.

Kamchiliklari:

  • Inson uchun tushunarli emas: Binar fayllarni matnli muharrirlar yordamida o'qish mumkin emas, ular kompyuter uchun tushunarli bo'ladi.

  • Muayyan formatga bog'liq: Fayllardagi ma'lumotlar kompyuter yoki dastur formati bilan bog'liq bo'lishi mumkin, shuning uchun ularni boshqa tizimlar yoki dasturlar bilan ishlatishda moslashish kerak bo'lishi mumkin.

GCC orqali binar fayllarni sinab ko'rish

Quyida GCC kompilyatori orqali yuqoridagi kodni qanday ishlatish ko'rsatilgan:

  1. Binar fayl bilan ishlash uchun:

    gcc binar_fayl.c -o binar_fayl
    ./binar_fayl

Bu kodlar bajarilgandan so'ng, student_data.bin nomli binar fayl yaratiladi va faylga yozilgan ma'lumot qayta o'qilib ekranga chiqariladi.

Xulosa:

  • Matnli fayllar inson tomonidan tushunilishi va o'qilishi mumkin bo'lsa, binar fayllar ma'lumotlarni bayt ko'rinishida saqlaydi.

  • Binar fayllar ma'lumotlarni samarali va tejamkor saqlaydi, lekin ularni o'qish va tahrirlash uchun maxsus dasturiy ta'minot yoki kod kerak bo'ladi.

  • fwrite va fread kabi funksiyalar binar fayllar bilan ishlashda muhim vositalar hisoblanadi.

Yuqoridagi tushunchalarni sinab ko'rish va GCC yordamida o'qish va yozish amaliyotini ishlatishingiz mumkin.

Maxfiy xabarlarni yzoish uchun qo'llasangiz buladi.

Last updated