C फ़ाइल I/O: फ़ाइल बनाएँ, खोलें, पढ़ें, लिखें और बंद करें

⚡ स्मार्ट सारांश

C में फ़ाइल हैंडलिंग stdio लाइब्रेरी के माध्यम से डिस्क पर स्थायी डेटा संग्रहीत करती है, जो fopen के साथ एक फ़ाइल खोलती है, fputc, fputs, या fprintf के साथ लिखती है, fgetc, fgets, या fscanf के साथ पढ़ती है, और fclose का उपयोग करके इसे बंद करती है।

  • 📁 फ़ाइल मोड: fopen को पास की गई मोड स्ट्रिंग — r, w, a, r+, w+, या a+ — यह तय करती है कि किसी फ़ाइल को पढ़ा जाएगा, ओवरराइट किया जाएगा या उसमें डेटा जोड़ा जाएगा।
  • ✍️ डेटा लेखन: fputc एक अक्षर लिखता है, fputs एक स्ट्रिंग लिखता है, और fprintf फ़ाइल पॉइंटर पर स्वरूपित पाठ लिखता है।
  • 📖 डेटा पढ़ना: fgetc एक कैरेक्टर पढ़ता है, fgets एक लाइन को बफर में पढ़ता है, और fscanf फ़ाइल से स्वरूपित टोकन को पार्स करता है।
  • 🔒 फ़ाइलें बंद करना: fclose बफर किए गए डेटा को फ्लश करता है और फ़ाइल को रिलीज़ करता है, सफलता पर 0 और विफलता पर EOF लौटाता है।
  • 🔁 इंटरेक्टिव इनपुट/आउटपुट: getc और putc एक समय में एक ही अक्षर को संभालते हैं, इनपुट को सीधे फ़ाइल में भेजते हैं और फिर वापस बाहर निकालते हैं।
  • 🤖 एआई सहायता: GitHub Copilot और AI सहायक fopen, fprintf और fgets रूटीन को तैयार करते हैं और छूटे हुए NULL चेक या बंद न की गई फ़ाइलों को चिह्नित करते हैं।

सी फ़ाइलें I/O

सी फ़ाइल प्रबंधन

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

  1. फ़ाइल का निर्माण
  2. फ़ाइल खोलना
  3. फ़ाइल पढ़ना
  4. फ़ाइल में लिखना
  5. फ़ाइल बंद करना

'C' में उपलब्ध सबसे महत्वपूर्ण फ़ाइल प्रबंधन फ़ंक्शन निम्नलिखित हैं,

समारोह उद्देश्य
फ़ोपेन () फ़ाइल बनाना या मौजूदा फ़ाइल खोलना
फ़क्लोज़ () फ़ाइल बंद करना
एफ़प्रिंटफ़ () डेटा के एक ब्लॉक को फ़ाइल में लिखना
एफस्कैनफ () किसी फ़ाइल से ब्लॉक डेटा पढ़ना
गेटसी () किसी फ़ाइल से एक एकल वर्ण पढ़ता है
पुटक () किसी फ़ाइल में एक एकल वर्ण लिखता है
गेटव () किसी फ़ाइल से पूर्णांक पढ़ता है
पुटव () किसी फ़ाइल में पूर्णांक लिखना
फ़सीक () फ़ाइल पॉइंटर की स्थिति को निर्दिष्ट स्थान पर सेट करता है
फ़टेल () फ़ाइल पॉइंटर की वर्तमान स्थिति लौटाता है
रिवाइंड () फ़ाइल पॉइंटर को फ़ाइल के आरंभ में सेट करता है

फ़ाइल कैसे बनाएं

जब भी आप किसी फ़ाइल के साथ काम करना चाहते हैं, तो पहला कदम फ़ाइल बनाना है। फ़ाइल कुछ और नहीं बल्कि मेमोरी में मौजूद जगह होती है जहाँ डेटा स्टोर होता है।

'C' प्रोग्राम में फ़ाइल बनाने के लिए निम्नलिखित सिंटैक्स का उपयोग किया जाता है,

FILE *fp;
fp = fopen ("file_name", "mode");

उपरोक्त सिंटैक्स में, फ़ाइल एक डेटा संरचना है जिसे मानक लाइब्रेरी में परिभाषित किया गया है।

fopen एक मानक फ़ंक्शन है जिसका उपयोग फ़ाइल खोलने के लिए किया जाता है।

  • यदि फ़ाइल सिस्टम पर मौजूद नहीं है, तो उसे बनाया जाता है और फिर खोला जाता है।
  • यदि कोई फ़ाइल पहले से ही सिस्टम पर मौजूद है, तो इस फ़ंक्शन का उपयोग करके उसे सीधे खोला जाता है।

fp एक फ़ाइल है सूचक जो टाइप फ़ाइल की ओर इशारा करता है।

जब भी आप कोई फ़ाइल खोलते या बनाते हैं, तो आपको यह निर्दिष्ट करना होता है कि आप फ़ाइल के साथ क्या करने जा रहे हैं। 'C' प्रोग्रामिंग में फ़ाइल को पढ़ने/लिखने के उद्देश्य से बनाया या खोला जा सकता है। मोड का उपयोग यह निर्दिष्ट करने के लिए किया जाता है कि आप नीचे दिए गए किसी भी उद्देश्य के लिए फ़ाइल खोलना चाहते हैं या नहीं। 'C' प्रोग्रामिंग में विभिन्न प्रकार के मोड निम्नलिखित हैं जिनका उपयोग फ़ाइल के साथ काम करते समय किया जा सकता है।

फ़ाइल मोड विवरण
r पढ़ने के लिए फ़ाइल खोलें। यदि फ़ाइल पढ़ने के मोड में है, तो सिस्टम पर पहले से मौजूद फ़ाइल के मामले में कोई डेटा डिलीट नहीं होता है।
w लिखने के लिए फ़ाइल खोलें। अगर कोई फ़ाइल लेखन मोड में है, तो अगर फ़ाइल मौजूद ही नहीं है, तो एक नई फ़ाइल बनाई जाती है। अगर कोई फ़ाइल सिस्टम पर पहले से मौजूद है, तो फ़ाइल के अंदर का सारा डेटा काट दिया जाता है, और उसे लिखने के उद्देश्य से खोला जाता है।
a किसी फ़ाइल को अपेंड मोड में खोलें। यदि कोई फ़ाइल अपेंड मोड में है, तो वह खुल जाएगी। फ़ाइल के अंदर की सामग्री में कोई परिवर्तन नहीं होगा।
r+ शुरू से ही पढ़ने और लिखने के लिए खुला
w+ पढ़ने और लिखने के लिए खोलें, फ़ाइल को अधिलेखित करें
a+ पढ़ने और लिखने के लिए खोलें, फ़ाइल में जोड़ें

दिए गए सिंटैक्स में, फ़ाइल नाम और मोड को इस प्रकार निर्दिष्ट किया गया है: तार इसलिए इन्हें हमेशा दोहरे उद्धरण चिह्नों के भीतर ही रखना चाहिए।

उदाहरण के लिए:

#include <stdio.h>
int main() {
FILE *fp;
fp  = fopen ("data.txt", "w");
}

आउटपुट:

फ़ाइल उसी फ़ोल्डर में बनाई जाती है जहाँ आपने अपना कोड सहेजा है।

C प्रोग्राम आउटपुट में एक फ़ाइल बनाएँ

आप वह पथ निर्दिष्ट कर सकते हैं जहाँ आप अपनी फ़ाइल बनाना चाहते हैं

#include <stdio.h>
int main() {
FILE *fp;
fp  = fopen ("D://data.txt", "w");
}

C भाषा में निर्दिष्ट पथ के साथ एक फ़ाइल बनाएँ

फ़ाइल कैसे बंद करें

जब भी फ़ाइल पर काम पूरा हो जाए, तो फ़ाइल को हमेशा बंद कर देना चाहिए। इसका मतलब है कि फ़ाइल की सामग्री और लिंक समाप्त हो गए हैं। इससे फ़ाइल को होने वाली आकस्मिक क्षति से बचा जा सकता है।

'C' फ़ाइल बंद करने का कार्य करने के लिए fclose फ़ंक्शन प्रदान करता है। fclose का सिंटैक्स इस प्रकार है,

fclose (file_pointer);

उदाहरण के लिए:

FILE *fp;
fp  = fopen ("data.txt", "r");
fclose (fp);

fclose फ़ंक्शन एक फ़ाइल पॉइंटर को आर्गुमेंट के रूप में लेता है। इस फ़ंक्शन की सहायता से फ़ाइल पॉइंटर से जुड़ी फ़ाइल को बंद कर दिया जाता है। यदि फ़ाइल सफलतापूर्वक बंद हो जाती है तो यह 0 लौटाता है, और यदि फ़ाइल बंद करने में कोई त्रुटि होती है तो EOF (फ़ाइल का अंत) लौटाता है।

फ़ाइल बंद करने के बाद, उसी फ़ाइल पॉइंटर का उपयोग अन्य फ़ाइलों के साथ भी किया जा सकता है।

'सी' प्रोग्रामिंग में, प्रोग्राम समाप्त होने पर फ़ाइलें स्वचालित रूप से बंद हो जाती हैं। fclose फ़ंक्शन लिखकर मैन्युअल रूप से फ़ाइल बंद करना एक अच्छा प्रोग्रामिंग अभ्यास है।

एक फ़ाइल के लिए लेखन

C में, जब आप किसी फ़ाइल में लिखते हैं, तो न्यूलाइन वर्ण '\n' को स्पष्ट रूप से जोड़ा जाना चाहिए।

stdio लाइब्रेरी फ़ाइल में लिखने के लिए आवश्यक फ़ंक्शन प्रदान करती है:

  • fputc(char, file_pointer): यह file_pointer द्वारा इंगित फ़ाइल में एक वर्ण लिखता है।
  • fputs(str, file_pointer): यह file_pointer द्वारा इंगित फ़ाइल में एक स्ट्रिंग लिखता है।
  • fprintf(file_pointer, str, variable_lists): यह file_pointer द्वारा इंगित फ़ाइल में एक स्ट्रिंग प्रिंट करता है। स्ट्रिंग में वैकल्पिक रूप से फ़ॉर्मेट स्पेसिफ़ायर और वेरिएबल की सूची variable_lists शामिल हो सकती है।

नीचे दिया गया प्रोग्राम दिखाता है कि किसी फ़ाइल में लेखन कैसे किया जाता है:

fputc() फ़ंक्शन:

#include <stdio.h>
int main() {
        int i;
        FILE * fptr;
        char fn[50];
        char str[] = "Guru99 Rocks\n";
        fptr = fopen("fputc_test.txt", "w"); // "w" defines "writing mode"
        for (i = 0; str[i] != '\n'; i++) {
            /* write to file using fputc() function */
            fputc(str[i], fptr);
        }
        fclose(fptr);
        return 0;
    }

आउटपुट:

C में fputc() फ़ंक्शन का आउटपुट

उपरोक्त प्रोग्राम fputc_test.txt फ़ाइल में एक-एक अक्षर तब तक लिखता है जब तक कि अगली पंक्ति का चिह्न “\n” न आ जाए, जो यह दर्शाता है कि वाक्य सफलतापूर्वक लिखा गया है। इस प्रक्रिया में, ऐरे के प्रत्येक अक्षर को लेकर फ़ाइल में लिखा जाता है।

fputc_test.txt फ़ाइल की सामग्री C भाषा में लिखी गई है।

  1. उपरोक्त प्रोग्राम में, हमने fputc_test.txt नामक एक फाइल बनाई है और उसे राइट मोड में खोला है तथा अपनी स्ट्रिंग घोषित की है, जिसे फाइल में लिखा जाएगा।
  2. हम for loop का उपयोग करके अक्षर दर अक्षर लिखने का कार्य करते हैं और प्रत्येक अक्षर को अपनी फ़ाइल में तब तक डालते हैं जब तक कि “\n” अक्षर न आ जाए, फिर फ़ाइल को fclose फ़ंक्शन का उपयोग करके बंद कर दिया जाता है।

fputs () फ़ंक्शन:

#include <stdio.h>
int main() {
        FILE * fp;
        fp = fopen("fputs_test.txt", "w+");
        fputs("This is Guru99 Tutorial on fputs,", fp);
        fputs("We don't need to use for loop\n", fp);
        fputs("Easier than fputc function\n", fp);
        fclose(fp);
        return (0);
    }

आउटपुट:

C में fputs() फ़ंक्शन का आउटपुट

C में fputs_test.txt फ़ाइल की सामग्री

  1. उपरोक्त प्रोग्राम में, हमने fputs_test.txt नामक एक फ़ाइल बनाई और उसे लेखन मोड में खोला है।
  2. fputs() फ़ंक्शन का उपयोग करके तीन अलग-अलग स्ट्रिंग लिखकर राइट ऑपरेशन करने के बाद
  3. फिर फ़ाइल को fclose फ़ंक्शन का उपयोग करके बंद कर दिया जाता है।

fprintf()फ़ंक्शन:

#include <stdio.h>
    int main() {
        FILE *fptr;
        fptr = fopen("fprintf_test.txt", "w"); // "w" defines "writing mode"
        /* write to file */
        fprintf(fptr, "Learning C with Guru99\n");
        fclose(fptr);
        return 0;
    }

आउटपुट:

C में fprintf() फ़ंक्शन का आउटपुट

C में fprintf_test.txt फ़ाइल की सामग्री

  1. उपरोक्त प्रोग्राम में हमने fprintf_test.txt नामक एक फाइल बनाई और उसे लेखन मोड में खोला है।
  2. स्ट्रिंग लिखकर fprintf() फ़ंक्शन का उपयोग करके लेखन ऑपरेशन निष्पादित करने के बाद, फ़ाइल को fclose फ़ंक्शन का उपयोग करके बंद कर दिया जाता है।

फ़ाइल से डेटा पढ़ना

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

  • fgetc(file_pointer): यह फ़ाइल पॉइंटर द्वारा इंगित फ़ाइल से अगला कैरेक्टर लौटाता है। फ़ाइल का अंत पहुँचने पर, EOF वापस भेजा जाता है।
  • fgets(buffer, n, file_pointer): यह फ़ाइल से n-1 वर्ण पढ़ता है और स्ट्रिंग को एक बफ़र में संग्रहीत करता है जिसमें अंतिम वर्ण के रूप में NULL वर्ण '\0' जोड़ा जाता है।
  • fscanf(file_pointer, conversion_specifiers, variable_adresses): इसका उपयोग डेटा को पार्स और विश्लेषण करने के लिए किया जाता है। यह फ़ाइल से वर्ण पढ़ता है और रूपांतरण विनिर्देशकों का उपयोग करके इनपुट को variable_adresses नामक चर बिंदु सूची में असाइन करता है। ध्यान रखें कि scanf की तरह ही, fscanf भी स्ट्रिंग में स्पेस या नई लाइन मिलने पर पढ़ना बंद कर देता है।

निम्नलिखित प्रोग्राम क्रमशः fgets(), fscanf() और fgetc() फ़ंक्शन का उपयोग करके fputs_test.txt फ़ाइल से पढ़ने का प्रदर्शन करता है:

#include <stdio.h>
int main() {
        FILE * file_pointer;
        char buffer[30], c;

        file_pointer = fopen("fprintf_test.txt", "r");
        printf("----read a line----\n");
        fgets(buffer, 50, file_pointer);
        printf("%s\n", buffer);

        printf("----read and parse data----\n");
        file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer
        char str1[10], str2[2], str3[20], str4[2];
        fscanf(file_pointer, "%s %s %s %s", str1, str2, str3, str4);
        printf("Read String1 |%s|\n", str1);
        printf("Read String2 |%s|\n", str2);
        printf("Read String3 |%s|\n", str3);
        printf("Read String4 |%s|\n", str4);

        printf("----read the entire file----\n");

        file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer
        while ((c = getc(file_pointer)) != EOF) printf("%c", c);

        fclose(file_pointer);
        return 0;
    }

रिजल्ट:

----read a line----
Learning C with Guru99

----read and parse data----
Read String1 |Learning|
Read String2 |C|
Read String3 |with|
Read String4 |Guru99|
----read the entire file----
Learning C with Guru99

C आउटपुट में फ़ाइल से डेटा पढ़ना

  1. उपरोक्त प्रोग्राम में, हमने “fprintf_test.txt” नामक फ़ाइल खोली है, जिसे पहले fprintf() फ़ंक्शन का उपयोग करके लिखा गया था, और इसमें “Learning C with” लिखा है। Guru99” स्ट्रिंग। हम इसे fgets() फ़ंक्शन का उपयोग करके पढ़ते हैं, जो पंक्ति दर पंक्ति पढ़ता है, जहाँ बफ़र का आकार पूरी पंक्ति को संभालने के लिए पर्याप्त होना चाहिए।
  2. हम फ़ाइल को दोबारा खोलते हैं ताकि पॉइंटर फ़ाइल को फ़ाइल की शुरुआत में रीसेट किया जा सके। प्रत्येक शब्द को अलग-अलग संभालने के लिए विभिन्न स्ट्रिंग वैरिएबल बनाएं। उनकी सामग्री देखने के लिए वैरिएबल प्रिंट करें। fscanf() का उपयोग मुख्य रूप से एक्सप्रेशन के लिए किया जाता है।tracकिसी फाइल से डेटा को पढ़ना और पार्स करना।
  3. फ़ाइल की शुरुआत में पॉइंटर फ़ाइल को रीसेट करने के लिए फ़ाइल को फिर से खोलें। EOF स्टेटमेंट मिलने तक getc() फ़ंक्शन का उपयोग करके फ़ाइल से अक्षर दर अक्षर डेटा पढ़ें और प्रिंट करें
  4. विभिन्न प्रकारों का उपयोग करके फ़ाइल पढ़ने का ऑपरेशन करने के बाद, हमने फिर से fclose फ़ंक्शन का उपयोग करके फ़ाइल को बंद कर दिया।

getc और putc के साथ इंटरैक्टिव फ़ाइल पढ़ें और लिखें

ये सबसे सरल फ़ाइल ऑपरेशन हैं। Getc का मतलब है get कैरेक्टर, और putc का मतलब है put कैरेक्टर। इन दोनों फ़ंक्शन का इस्तेमाल एक समय में सिर्फ़ एक ही कैरेक्टर को संभालने के लिए किया जाता है।

निम्नलिखित प्रोग्राम 'सी' प्रोग्रामिंग में फ़ाइल हैंडलिंग फ़ंक्शन को प्रदर्शित करता है:

#include <stdio.h>
int main() {
        FILE * fp;
        char c;
        printf("File Handling\n");
        //open a file
        fp = fopen("demo.txt", "w");
        //writing operation
        while ((c = getchar()) != EOF) {
            putc(c, fp);
        }
        //close file
        fclose(fp);
        printf("Data Entered:\n");
        //reading
        fp = fopen("demo.txt", "r");
        while ((c = getc(fp)) != EOF) {
            printf("%c", c);
        }
        fclose(fp);
        return 0;
    }

आउटपुट:

C आउटपुट में इंटरेक्टिव फ़ाइल रीड और राइट

C भाषा में getc और putc का उपयोग करके फ़ाइल हैंडलिंग आउटपुट का उपयोग किया जाता है।

  1. उपरोक्त प्रोग्राम में हमने डेमो नामक एक फाइल बनाई है और उसे राइट मोड में खोला है।
  2. लेखन कार्य निष्पादित होने के बाद, फ़ाइल को fclose फ़ंक्शन का उपयोग करके बंद कर दिया जाता है।
  3. हमने फिर से एक फ़ाइल खोली है जिसमें अब रीडिंग मोड में डेटा है। जब तक eof नहीं मिल जाता, while लूप निष्पादित होगा। एक बार फ़ाइल का अंत मिल जाने पर ऑपरेशन समाप्त हो जाएगा और printf फ़ंक्शन का उपयोग करके डेटा प्रदर्शित किया जाएगा।
  4. पढ़ने का कार्य करने के बाद फ़ाइल को fclose फ़ंक्शन का उपयोग करके पुनः बंद कर दिया जाता है।

अक्सर पूछे जाने वाले प्रश्न

टेक्स्ट मोड ऑपरेटिंग सिस्टम के अनुसार न्यूलाइन कैरेक्टर को ट्रांसलेट करता है, जबकि बाइनरी मोड, जिसे “rb” या “wb” से खोला जाता है, बाइट्स को ठीक वैसे ही लिखता है जैसे वे हैं। इमेज, ऑडियो या किसी भी ऐसे डेटा के लिए बाइनरी मोड का उपयोग करें जहां बाइट लेआउट को हूबहू संरक्षित करना आवश्यक हो।

जब कोई फ़ाइल नहीं खुल पाती है, जैसे कि फ़ाइल का न होना, अनुमति न मिलना या डिस्क का भरा होना, तो fopen फ़ंक्शन NULL लौटाता है। पढ़ने या लिखने से पहले हमेशा लौटाए गए पॉइंटर की NULL से जाँच करें, अन्यथा प्रोग्राम एक अमान्य पॉइंटर का उपयोग करेगा और आमतौर पर क्रैश हो जाएगा।

राइट मोड “w” मौजूदा फ़ाइल को छोटा कर देता है, यानी लिखने से पहले उसकी सामग्री मिटा देता है, और फ़ाइल के न होने पर उसे बना देता है। अपेंड मोड “a” मौजूदा डेटा को सुरक्षित रखता है और अंत में नई सामग्री जोड़ता है, इसलिए पहले से संग्रहीत कोई भी डेटा नष्ट नहीं होता है।

fseek फ़ंक्शन फ़ाइल पॉइंटर को SEEK_SET, SEEK_CUR या SEEK_END से मापे गए बाइट ऑफ़सेट पर ले जाता है। ftell पॉइंटर की वर्तमान बाइट स्थिति लौटाता है, और rewind इसे फ़ाइल की शुरुआत में वापस भेज देता है। ये दोनों फ़ंक्शन मिलकर अनुक्रमिक पठन के बजाय यादृच्छिक पहुँच प्रदान करते हैं।

fgets पूरी पंक्ति पढ़ता है, रुकेंping यह फ़ंक्शन नई पंक्ति पर या n-1 वर्णों के बाद सक्रिय होता है, इसलिए यह बफ़र आकार का ध्यान रखता है। fscanf स्वरूपित, स्पेस-सेपरेटेड टोकन पढ़ता है और एक छोटे ऐरे को ओवरफ़्लो कर सकता है। पूरी पंक्तियों को सुरक्षित रूप से पढ़ने के लिए, fgets बेहतर विकल्प है।

EOF एक स्थिरांक है, आमतौर पर -1, जो फ़ाइल के अंत को दर्शाता है। getc, fgetc और fscanf जैसे पढ़ने वाले फ़ंक्शन डेटा समाप्त होने पर EOF लौटाते हैं, यही कारण है कि लूप पढ़ने को रोकने के लिए अपने परिणाम की तुलना EOF से करते हैं।

जी हां। एक एआई कोडिंग सहायक सामान्य भाषा में दिए गए निर्देशों के आधार पर fopen, fprintf और fgets रूटीन तैयार कर सकता है, प्रत्येक फ़ाइल मोड की व्याख्या कर सकता है और NULL चेक की कमी या बंद न की गई फ़ाइल जैसी त्रुटियों का पता लगा सकता है। एआई द्वारा सुझाए गए कोड पर भरोसा करने से पहले हमेशा उसे कंपाइल और टेस्ट करें।

गिटहब कोपिलॉट यह C फ़ाइल हैंडलिंग कोड लिखता है, जो एक संक्षिप्त टिप्पणी या फ़ंक्शन नाम से fopen, fputs और fscanf ब्लॉक का पूरा सेट सुझाता है। यह अक्सर संबंधित fclose कॉल और त्रुटि जाँच भी जोड़ता है, हालाँकि आपको फिर भी जेनरेट किए गए लॉजिक की समीक्षा करनी चाहिए।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: