File Handling in C Language - W3 Coding Club

File Handling (फाइल हैंडिलिंग)

कम्प्यूटर में डेटा को फाइल के रूप में स्टोर किया जाता है। अभी तक हमने जितने भी प्रोग्राम बनाए। वे प्रोग्राम आउटपुट को स्थाई रूप से स्टोर करने में सक्षम नहीं है। डेटा की स्थाई रूप से सेव करने के लिए उसे फाइल के रूप में स्टोर करना होता है। सी भाषा में हम अपने प्रोग्राम के आउटपुट को फाइल के रूप में भी स्टोर कर सकते हैं जिससे कि उसे भविष्य में पुन प्रयोग में लाया जा सके। हम अपने प्रोग्राम के माध्यम से फाइल से संबंधित कार्य कर सकते है। 

⇉      फाइल में से Data को पढ़ना (Read)
      फाइल में डेटा को लिखना (Write)
      फाइल में और डेटा को जोड़ना (Append) 

उपरोक्त में से कोई भी कार्य करने के लिए निम्न ऑपरेशन करने होते हैं.
⇉      फाइल को कार्य से संबंधित मोड में खोलना फाइल पर इच्छित कार्य करना
⇉      फाइल को बंद करना
      उपरोक्त विकल्पों को क्रम से समझते हैं

■ फाइल को खोलना (Opening a file)

किसी फाइल को प्रोग्राम द्वारा प्रयोग में लेने के लिए पहले उसे ओपन किया जाता है। फाइल को Open करने के लिए हमें अपने प्रोग्राम में FILE Structure type (फाइल स्ट्रक्चर टाईप) का एक पॉइंटर डिक्लेयर करना होता है| FILE स्ट्रक्चर stdio.h फाइल में डिफाइन किया हुआ होता है।

किसी डेटा फाइल को प्रोग्राम में फंक्शन का प्रयोग करके निम्न प्रकार ओपन किया जाता है। 

FILE *<rile pointer;
<file pointer>=fopen("file_name","mode")

Example:-

FILE *tp:
tp = fopen("tile_name", "mode");


उपरोक्त उदाहरण में वेरिएबल tp में फाइल का पॉइंटर स्टोर हो जाएगा, जिसके माध्यम से प्रोग्राम में उस फाइल को प्रयोग में लिया जा सकेगा।

File Modes(फाइल मोड)

किसी फाइल में डेटा को पढ़ने लिखने या जोड़ने के लिए अलग-अलग मोड्स का प्रयोग किया जाता है। ये मोड्स निम्न प्रकार के होते हैं। 

Mode Description
r इस मोड का प्रयोग फाइल में से डेटा को पढ़ने के लिए किया जाता है। यदि फाइल पहले से ही मौजूद होती है तो वह खुल जाती है अन्यथा एरर आ जाएगी।
w इस मोड का प्रयोग फाइल में डेटा को लिखने (स्टोर करने) के लिए किया जाता है। यदि फाइल पहले से मौजूद नहीं होती है तो नई फाइल बन जाती है अन्यथा वह over-right(ओवर राईट) हो जाती है।
a इस मोड का प्रयोग फाइल में नया डेटा जोड़ने के लिए किया जाता है। यदि फाइल पहले से मौजूद नहीं होती है तो नई फाइल बन जाती है अन्यथा उसमें और डेटा जुड़ जाता है।
r+ इस मोड का प्रयोग फाइल में से डेटा को पढ़ने तथा लिखने के लिए किया जाता है।
w+ इस मोड का प्रयोग फाइल में से डेटा को पढ़ने तथा लिखाने के लिए किया जाता है।
w+ इस मोड का प्रयोग फाइल में से डेटा को पढ़ने तथा लिखने के लिए किया जाता है।

■ फाइल को बंद करना (Closing a file)

फाइल से संबंधित कार्य पूरा हो जाता है तो उस फाइल को बंद करने के लिए fclose() funtion का प्रयोग किया जाता है।

fclose(file _pointer):

उदाहरण

File *fp;
fp = fopen("file_name", "mode");
.   .   .   .   .   .  .  .  .   .
.   .   .   .   .   .   .  .  .  . 
fclose(fp);

फाइलों पर विभिन्न ऑपरेशन हेतु फंक्शन

 किसी फाइल पर किए जाने वाले विभिन्न ऑपरेशन के लिए सी में विभिन्न प्रकार के फंक्शन उपलब्ध है।

 विभिन्न फंक्शन निम्न प्रकार है:-

putc() फंक्शन:-

इस फंक्शन का प्रयोग फाइल में एक अक्षर (कैरेक्टर) को स्टोर करने के लिए किया जाता है। इसे निम्न प्रकार से प्रयोग किया जाता है।

putc(char_variable, file_pointer); 

उदाहरण:-    

निम्न उदाहरण में एक नई फाइल बनाकर उसमें यूजर द्वारा इनपुट किया गया putc फंक्शन के माध्यम से डेटा स्टोर करवाया जा रहा हैं। 

    
    #include <stdio.h>
    #include <conio.h>
    void main()
    {
        FILE *f;
        char ch;
        printf("\nEnter text and press ^c(Ctrl+c) when finished...\n\n");
        f = fopen("My.txt""w");
        while (1)
        {
            ch = getchar();
            if (ch == EOF)
            {
                break;
            }
            else
            {
                putc(ch, f);
            }
        }
        fclose(f);
        printf("Data stored...");
        getch();
    }

Output:-

Enter text and press ^c (Ctrl+z) when finished
This is demo of putc function. ^z
Data stored...

Explain Example:-

उपरोक्त उदाहरण में सर्वप्रथम FILE *f के माध्यम से फाइल पॉइंटर बनाया जा रहा है। इस पॉइंटर की सहायता से ही फाइल पर अन्य ऑपरेशन संभव हो पाएंगे। f=fopen("My.txt","w) के माध्यम से My.txt नाम की फाइल को write mode में ओपन करने की कोशिश की जा रही है। यदि फाइल ओपन हो जाती है तो पॉइंटर में उस फाइल का पॉइंटर स्टोर हो जाएगा। प्रोग्राम में आगे एक लूप चलाया गया है। यह लूप तक तक चलेगा जब तक कि यूजर कीबोर्ड से Ctrl बटन को दबाकर रखते हुएC बटन नहीं दबा देता। Ctrl+C से उत्पन्न हुए अक्षर को एड-ऑफ-फाइल (EOF) भी कहा जाता है। इसके लिए लूप में ch-getchar() के माध्यम से यूजर से इनपुट लेकर chh नाम के वेरिएबल में स्टोर करवाया जा रहा है, जिसे बाद में putc(ch, f) के माध्यम से फाइल में स्टोर करवा दिया गया है।

getc() Function:-

इस फक्शन का प्रयोग फाइल में एक अक्षर को पढ़ने के लिए किया जाता है। getc() फंक्शन में फाइल पॉइंटर किसी अक्षर को पढ़ने के बाद एक स्थान आगे की ओर खिसक जाता है तथा फाइल के अंत में पहुंचने पर EOF प्रतीक रिटर्न करता है। इस फंक्शन को निम्न प्रकार से प्रयोग किया जाता है

ch = gete(file_pointer);

Example:-

निम्न उदाहरण में पहले से बनी एक फाइल खोलकर उसमें से getc() फक्शन के माध्यम से  Data(डेटा) पढ़ा जा रहा है। 
   
    #include <stdio.h>
    #include <conio.h>
    void main()
    {
        FILE *f;
        char ch;
        printf("Data of file : \n\n");
        f = fopen("My.txt""r");
        while (1)
        {
            ch = getc(f);
            if (ch == EOF)
            {
                break;
            }
            else
            {
                printf("%c", ch); //or putchar(ch);
            }
        }
        fclose(f);
        getch();
    }

Output:-

Data of file:
This is a demo of pute function.

Explain Example:-

उपरोक्त उदाहरण में यह माना गया है कि करट फोल्डर में My.txt नाम की फाइल पहले से मौजूद है तथा उसमें This is a demo of putc function स्टोर है। यदि प्रोग्राम को न कराते समय करट फोल्डर में यह फाइल नहीं है तो पहले यह फाइल बना कर उसमें कुछ टेक्स्ट टाइप कर लें।

ध्यान दें कि फाइल ये डेटा पढ़ने के लिए फाइल को रीड (read) मोड में खोला गया है। तत्पश्चात् chegeto(1) के माध्यम से फाइल से एक-एक कैरेक्टर वेरिएबल के में स्टोर करवाया जा रहा है। साथ ही यह भी जाया जा रहा है कि ch में स्टोर किया गया कैरेक्टर एक-ऑफ-फाइल है। जैसे ही EOF मिलता है वैसे ही लूप भी समाप्त हो जाता है। लूप में ch में स्टोर किए गए कैरेक्टर को स्क्रीन पर प्रिंट करवा दिया गया है।

putw() फंक्शन :-

फक्शन का प्रयोग फाइल में इटीजर वैल्यू को स्टोर करने के लिए किया जाता है। इसे निम्न से प्रयोग किया जाता है
putw(int_value, file pointer);

Example:-

 निम्न उदाहरण में एक नई फाइल बनाकर उसमें यूजर द्वारा इनपुट किया गया putw() के माध्यम से डेटा स्टोर करवाया जा रहा है

   
    #include <stdio.h>
    #include <conio.h>
    void main()
    {
        FILE *f;
        int i;
        f = fopen("My.txt""w");
        for (i = 0; i <= 10; i++)
        {
            putw(i, f);
        }
        fclose(f);
        printf("Data Stored.....");        
        getch();
    }

Output:-

Data stored....
Explain Example:-
 उपरोक्त उदाहरण में My.txt  नाम से नई फाइल बनाई जा रही है। वेरिएबल के आधार पर एक लूप चलाते हुए 1 से 10 तक संख्याएं उस फाइल में स्टोर करवाई जा रही है।

getw() फंक्शन:-

इस फंक्शन का प्रयोग फाइल में इंटीजर वैल्यू को पढ़ने के लिए किया जाता है। इसे निम्न प्रकार से प्रयोग किया जाता है;

Example:-

निम्न उदाहरण में getw() फंक्शन के माध्यम से फाइल में से इंटीजर डेटा को पढ़ा जा रहा
   
    #include <stdio.h>
    #include <conio.h>
    void main()
    {
        FILE *f;
        int i, n;
        // write data in file
        f = fopen("My.txt""w");
        for (i = 0; i <= 10; i++)
        {
            putw(i, f);
        }
        fclose(f);
        printf("Data Stored..... \n\n press any key to print data..\n\n");            
        getch();

        // read data from file
        f = fopen("My.txt""r");
        for (i = 0; i <= 10; i++)
        {
            n = getw(f);
            printf("\n %d", n);
        }
        fclose(f);
        getch();
    }

Output:-

1
2
3
4
5
6
7
8
9
10

Explain Example:-

उपरोक्त उदाहरण में My.txt नाम से नई फाइल बनाई जा रही है। वेरिएबल के आधार पर एक लूप चलाते हुए 1 से 10 तक संख्याएं उस फाइल में स्टोर करवाई जा रही है। तत्पश्चात् उसी फाइल को रीड मोड में खोलते हुए उसमें से इटीजर डेटा को getw() फंक्शन की सहायता से पढ़ा जा रहा है।

fprintf() फंक्शन:-

यह फंक्शन printf(...) के समकक्ष होता है। इस फंक्शन की सहायता से अलग-अलग प्रकार के डेटा को फाइल में एक साथ स्टोर किया जा सकता है।
इसका प्रारूप निम्न प्रकार होता है। 

fprintf(file_pointer, "format", values);

Example:-

fprintf(fp, "%s", name);

fscanf() फंक्शन:-

इस function की सहायता से अलग अलग प्रकार के data को फाइल में से एक साथ पढ़ा जा सकता हैं।
इसका प्रारूप निम्न होता हैं:

fscanf(file_pointer, "format", values);

Example:-


निम्न उदाहरण में fprintf() तथा fscanf() का प्रयोग किया गया हैं । 


    #include <stdio.h>
    #include <conio.h>
    void main()
    {
        FILE *f;
        char name[10];
        int salary, c;
        f = fopen("My.txt""w");
        printf("Enter Name and Salary for 3 employees\n");            
        for (c = 0; c < 3; c++)
        {
            fscanf(stdin"%s  %d "&name, &salary);
            fprintf(f, "%s  %d", name, salary);
        }
        fclose(f);
        f = fopen("My.txt""r");
        printf("\n\nOutput : ");
        printf("\nName \t\t Salary\n");
        for (c = 0; c < 3; c++)
        {
            printf("\n");
            fscanf(f, "%s  %d"&name, &salary);
            fprintf(stdout"%-8s %15d", name, salary);
        }
        fclose(f);
        getch();
    }

Output:-

Enter Name and Salary for 3 employees
Mukesh     99034
Dashrath     98349
Denny     97345
Output :
Name      Salary
Mukesh      99034
Dashrath      98349
Denny      97345

Explain Example:-

उपरोक्त उदाहरण में प्रथम लूप में fscanf() में कीबोर्ड (stdin) से डेटा इनपुट में लिया जा रहा है तथा fprintf() के माध्यम से उसी डेटा को फाइल में स्टोर करवाया जा रहा है। द्वितीय लूप में fscanf() में उसी फाइल से डेटा इनपुट में लेते हुए fprintf() के माध्यम से स्क्रीन पर (stdout) प्रिंट करवाया जा रहा है। fprintf() प्रयोग किया गया %-8s यह दर्शाता है कि स्ट्रिंग को 8 अक्षरों के फील्ड में प्रिंट किया जाए तथा - यह दर्शाता है कि उसे लेफ्ट अलाइड प्रिंट किया जाए। इसी प्रकार %15d का आशय है कि प्रिंट किए जाने वाले इंटीजर को 15 के फील्ड में प्रिंट किया जाए।

feof() फंक्शन:-

इस फंक्शन का प्रयोग यह ज्ञात करने के लिए किया जाता है कि फाइल का अंत (end of file position) आ गया है अथवा नहीं। इस फंक्शन में FILE पॉइंटर का प्रयोग आरग्यूमेंट की तरह किया। जाता है। feof() फंक्शन end of file आ जाने पर नॉन जीरो बैल्यू रिटर्न करता है अन्यथा जीरो रिटर्न करता है।

Example:-

निम्न उदाहरण में feof() का प्रयोग स्पष्ट किया गया है:-


    #include <stdio.h>
    #include <conio.h>
    void main()
    {
        FILE *f;
        int i, n;
        f = fopen("Mukesh.txt""w");
        for (i = 1; i <= 10; i++)
        {
            putw(i, f);
        }
        fclose(f);

        f = fopen("Mukesh.txt""r");
        while (1)
        {
            n = getw(f);
            if (feof(f) == 0)
            {
                printf("\n%d", n);
            }
            else
            {
                printf("\nEnd Of File..");        
                break;
            }
        }
        fclose(f);
        getch();
    }

Output:-

1
2
3
4
5
6
7
8
9
10
End Of File..

Explain Example:-

उपरोक्त उदाहरण में एक लूप चलाते हुए 1 से 10 तक की संख्याएं फाइल में स्टोर करवाई जा रही है। इसी फाइल को वापस रोड मोड में खोला जा रहा है। उसमें से डेटा को पढ़ने के लिए लूप में feof() के माध्यम से जांच की जा रही है कि क्या एड-ऑफ-फाइल आ गया है। यदि ऐसा होता है तो लूप को वहीं पर break, के माध्यम से रोक दिया गया है। यह ध्यान दें कि getw() तथा putw() के साथ EOF की जगह पर feof) फंक्शन का ही प्रयोग किया जाना चाहिए।


fseek() फंक्शन:-

इस फंक्शन का प्रयोग फाइल में किसी निश्चित स्थान पर जाने के लिए किया जाता है।
इसका प्रारूप निम्न होता है:

fseek(file_pointer, offset, position);

यहाँ offset से अर्थ उस value (long type की ) से हैं जितने अक्षर फाइल में आगे या पीछे की ओर जाने हों तथा position फाइल के प्रारंभ, अंत तथा पॉइन्टर के करंट स्थान को प्रदर्शित करता हैं।

Position value Meaning
0 Begin of file
1 Current Position
2 End Of File

Example:-

निम्न Example में यह मानते हुए कि Mukesh.txt फाइल में निम्नांकित टेक्स्ट हैं, fseek() का प्रयोग दर्शाया गया हैं। 
Hello this is a demo file.

    
    #include <stdio.h>
    #include <conio.h>
    void main()
    {
        FILE *f;
        long p;
        f = fopen("Mukesh.txt""r");
        if (f == NULL)
        {
            printf("Error Occured in fiole opening");
            exit();
        }
        p = 0;
        fseek(f, p, 0);
        printf("%c"getc(f));

        p = 6;
        fseek(f, p, 0);
        printf("%c"getc(f));

        p = 4;
        fseek(f, p, 1);
        printf("%c"getc(f));

        p = -3;
        fseek(f, p, 1);
        printf("%c"getc(f));
        fclose(f);
        getch();
    }

Output:-

H t i s

Explain Example:-

उपरोक्त उदाहरण में सर्वप्रथम NULL) के माध्यम से यह जांच की जा रही है कि क्या फाइल सफलता पूर्वक ओपन हो गई है। यदि फाइल सफलता पूर्वक ओपन नहीं होती है तो फाइल पॉइंटर में null स्टोर हो जाएगा, जिसके कारण से Error occured in file opening संदेश प्रिंट होते हुए exit ) के कारण प्रोग्राम समाप्त हो जाएगा। तत्पश्चात् eck() प्रत्येक बार वेरिएबल p में स्टोर वैल्यू के अनुसार फाइल पॉइट को मूस कर रहा है। जब यह संख् पॉजिटिव (धनात्मक) है तब पॉइंटर आगे की तरफ तथा जब वह वैल्यू नेगेटिव (ऋणात्मक) तब पॉइंटर पीछे की तरफ मूव हो रहा है।

Post a Comment

0 Comments