C मा fread() कसरी प्रयोग गर्ने: प्रभावकारी बाइनरी फाइल पढाइको व्याख्या

1. fread() को अवलोकन

fread() C मा प्रयोग हुने एउटा कार्य हो जसले बाइनरी डेटा स्ट्रिमबाट प्रोग्राममा पढ्छ। यो सामान्यतया फाइलको सामग्रीलाई बफरमा प्रभावकारी रूपमा लोड गर्न प्रयोग गरिन्छ, जसले ठूलो मात्रामा डेटा वा इमेज तथा अडियो जस्ता बाइनरी फाइलहरू पढ्न विशेष रूपमा उपयुक्त बनाउँछ।

1.1. fread() को आधारभूत प्रयोग

fread() को मूल सिन्ट्याक्स यस प्रकार हो:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
  • ptr : बफरको पोइन्टर जहाँ पढिएको डेटा संग्रहित हुनेछ
  • size : प्रत्येक तत्वको आकार (बाइटमा) जसलाई पढ्नुपर्नेछ
  • nmemb : पढ्नुपर्ने तत्वहरूको संख्या
  • stream : इनपुट स्ट्रिमको पोइन्टर

2. fread() कसरी काम गर्छ र यसको रिटर्न मान

2.1. fread() कसरी काम गर्छ

fread() ले निर्दिष्ट गरिएको बाइट सङ्ख्या दिइएको स्ट्रिमबाट पढ्छ र ptr द्वारा संकेत गरिएको बफरमा संग्रहित गर्छ। यो nmemb तत्वहरू पढ्ने प्रयास गर्छ, जसले कुल आकार size * nmemb बाइट बनाउँछ।

2.2. fread() को रिटर्न मान

fread() ले वास्तविकमा पढिएका तत्वहरूको सङ्ख्या फिर्ता गर्छ। सामान्यतया, यो मान nmemb बराबर हुनुपर्छ, तर यदि फाइलको अन्त्य (EOF) पुग्यो वा त्रुटि भयो भने सानो मान फिर्ता हुन सक्छ।

3. fread() को उदाहरण प्रयोग

3.1. साधारण कोड उदाहरण

निम्न कोडले बाइनरी फाइलबाट डेटा पढ्न fread() को आधारभूत प्रयोग देखाउँछ।

#include <stdio.h>

int main() {
    FILE *file;
    char buffer[10];

    file = fopen("example.bin", "rb");
    if (file == NULL) {
        printf("Unable to open file.n");
        return 1;
    }

    size_t bytesRead = fread(buffer, sizeof(char), 10, file);
    printf("%zu bytes read.n", bytesRead);

    fclose(file);
    return 0;
}

यस उदाहरणमा, “example.bin” नामको बाइनरी फाइल खोलिन्छ र त्यसबाट 10 बाइट पढिन्छ। यदि fread() सफल हुन्छ भने, पढिएका बाइटहरूको सङ्ख्या प्रदर्शित हुन्छ।

4. fread() प्रयोग गर्दा टिप्स र सावधानिहरू

4.1. बफर आकारको ख्याल राख्नुहोस्

fread() प्रयोग गर्दा सधैं बफरको आकार पर्याप्त छ कि छैन भन्ने सुनिश्चित गर्नुहोस्। गलत बफर आकार निर्दिष्ट गर्दा बफर ओभरफ्लो र अनपेक्षित व्यवहार हुन सक्छ।

4.2. EOF र त्रुटिहरू जाँच गर्नुहोस्

fread() ले nmemb भन्दा कम मान फिर्ता गर्छ यदि यो EOF मा पुग्छ वा त्रुटि पाउँछ। त्यसैले, पढ्ने अपरेसन सफल भयो कि भएन, वा त्रुटि भयो कि भएन, निर्धारण गर्न सधैं रिटर्न मान जाँच गर्नु महत्त्वपूर्ण छ।

5. समान कार्यहरू सँग तुलना

5.1. fread() र fgets() बीचको भिन्नता

fread() बाइनरी डेटा पढ्न विशेषीकृत छ, जबकि fgets() पाठ्य डेटा पढ्न प्रयोग हुन्छ। fgets() नयाँ लाइन क्यारेक्टरसम्म पढ्छ, जसले पाठ्य फाइलहरू ह्यान्डल गर्न अधिक उपयुक्त बनाउँछ।

5.2. fread() र fscanf() बीचको भिन्नता

fscanf() स्वरूपित इनपुट प्रक्रिया गर्न प्रयोग हुन्छ, निर्दिष्ट स्वरूप अनुसार डेटा पढ्छ। यसको विपरीत, fread() बाइनरी डेटा जस्तै छ त्यसै गरी पढ्छ र कुनै विशेष स्वरूपमा निर्भर हुँदैन।

6. fread() को उन्नत प्रयोग

6.1. संरचनाहरू पढ्ने

fread() लाई जटिल डेटा प्रकारहरू जस्तै संरचनाहरूको बाइनरी प्रतिनिधित्व सिधै पढ्न पनि प्रयोग गर्न सकिन्छ। उदाहरणका लागि, तल देखाइएका अनुसार फाइलबाट संरचना बचत र पुनः लोड गर्न सकिन्छ।

typedef struct {
    int id;
    char name[20];
} Record;

Record record;
fread(&record, sizeof(Record), 1, file);

6.2. प्रदर्शन सम्बन्धी विचारहरू

fread() ले ठूलो ब्लकको डेटा प्रभावकारी रूपमा पढ्छ, जसले fgetc() जस्ता एक बाइटमा एक पटक पढ्ने कार्यहरू भन्दा धेरै छिटो हुन्छ। ठूलो फाइलहरूसँग काम गर्दा fread() जस्ता ब्लक‑आधारित पढाइले प्रदर्शनमा उल्लेखनीय सुधार ल्याउन सक्छ।

7. सारांश

fread() C मा बाइनरी डेटा पढ्नको लागि एक शक्तिशाली कार्य हो। यसलाई सही तरिकाले प्रयोग गर्दा फाइलको सामग्रीलाई प्रभावकारी र सुरक्षित रूपमा प्रोग्राममा आयात गर्न सकिन्छ। यो कार्यमा निपुणता हासिल गर्दा तपाईंको बाइनरी फाइल ह्यान्डलिङ C प्रोग्रामिङमा नयाँ स्तरमा पुग्न सक्छ।

侍エンジニア塾