🔴 Advanced  ·  Lesson 36

File Handling

File handling क्या है?

आम तौर पर, C program variables में जो कुछ रखता है वह program खत्म होते ही मिट जाता है। File handling program को disk पर किसी file में data सहेजने देता है ताकि वह बचा रहे — आप अभी लिख सकते हैं और कल वापस पढ़ सकते हैं। इसी तरह programs scores, settings, records और reports याद रखते हैं।

C यह सब एक विशेष FILE pointer और <stdio.h> के functions के ज़रिए करता है। तरीका हमेशा एक जैसा है: file खोलो, इस्तेमाल करो, बंद करो।

FILE pointer और fopen

File के साथ काम करने के लिए पहले उसे fopen से खोलते हैं, जो आपको एक FILE pointer लौटाता है। हर बाद का काम उसी pointer से होता है।

C Language
FILE *fp;                       // एक file pointer
fp = fopen("data.txt", "w");    // लिखने के लिए खोलें

if (fp == NULL) {               // खोलना fail हो सकता है!
    printf("File nahi khul saki.\n");
    return 1;
}

fopen दो चीज़ें लेता है: file का नाम और एक mode जो बताता है कि आप उसके साथ क्या करना चाहते हैं।

File opening modes

Modeमतलब
"r"सिर्फ़ पढ़ना — file पहले से मौजूद होनी चाहिए
"w"लिखना — नई file बनाता है या मौजूदा को मिटाता है
"a"Append — अंत में जोड़ता है, पुराना content रखते हुए
"r+"मौजूदा file पढ़ना और लिखना
"w+"पढ़ना और लिखना; मौजूदा content मिटाता है
⚠️ "w" से सावधान

मौजूदा file को "w" mode में खोलना उसमें सब कुछ तुरंत मिटा देता है। पुराना data रखना हो तो "a" इस्तेमाल करें।

File में लिखना

Write mode में खुलने के बाद, fprintf बिल्कुल printf जैसा काम करता है पर text file में भेजता है।

C Language
#include <stdio.h>
int main() {
    FILE *fp = fopen("data.txt", "w");
    if (fp == NULL) return 1;

    fprintf(fp, "Hello, file!\n");
    fprintf(fp, "Marks: %d\n", 95);

    fclose(fp);                 // सहेजें और बंद करें
    printf("Data likha gaya.\n");
    return 0;
}
Output (screen पर):
Data likha gaya.

data.txt के अंदर:
Hello, file!
Marks: 95

File से पढ़ना

पढ़ने के लिए file को "r" mode में खोलें और fgets (lines के लिए) या fscanf (formatted values के लिए) इस्तेमाल करें।

C Language
#include <stdio.h>
int main() {
    FILE *fp = fopen("data.txt", "r");
    if (fp == NULL) {
        printf("File nahi mili.\n");
        return 1;
    }
    char line[100];
    while (fgets(line, sizeof(line), fp) != NULL)
        printf("%s", line);      // हर line print करें

    fclose(fp);
    return 0;
}
Output:
Hello, file!
Marks: 95

fgets loop तब तक पढ़ता रहता है जब तक वह NULL न लौटाए, जो file के अंत को दर्शाता है।

हमेशा जाँचें और बंद करें

दो आदतें file handling को सुरक्षित और भरोसेमंद बनाती हैं:

  • fopen के तुरंत बाद NULL जाँचें — file गायब या locked हो सकती है।
  • काम पूरा होने पर fclose करें — यह buffered data को disk पर भेजता है और file को छोड़ता है।
💡 fclose क्यों ज़रूरी है

आपका लिखा text अक्सर पहले किसी buffer में रहता है। fclose (या fflush) ही उसे असल में file में डालता है। इसे छोड़ें तो आप अपने data का आख़िरी हिस्सा खो सकते हैं।

आम गलतियाँ

  • FILE pointer को पहले NULL जाँचे बिना इस्तेमाल करना।
  • मौजूदा file को "w" में खोलकर गलती से उसे मिटा देना।
  • fclose भूलना, जिससे buffered data खो सकता है।
  • Write mode में खुली file को पढ़ने की कोशिश, या read-only खुली में लिखने की।
🏋️ अभ्यास

एक program लिखें जो हर बार चलने पर log.txt में एक नई line जोड़े (mode "a"), फिर दूसरा program जो पूरा log पढ़कर print करे। पहले वाले को तीन बार चलाएँ और पुष्टि करें कि log बढ़ता है।

सारांश

  • File handling FILE pointer और stdio.h functions से data स्थायी रूप से सहेजती है।
  • fopen(name, mode) से खोलें; result को हमेशा NULL के लिए जाँचें।
  • Modes: "r" पढ़ना, "w" overwrite, "a" append, और + variants।
  • fprintf से लिखें; fgets या fscanf से पढ़ें।
  • Data flush करने और file छोड़ने के लिए हमेशा fclose करें।

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

C में file handling क्या है?
File handling किसी C program की वह क्षमता है जिससे वह disk पर files बना सके, उनमें लिख सके, पढ़ सके और बंद कर सके, ताकि data program खत्म होने पर मिटने के बजाय स्थायी रूप से सहेजा जाए। यह FILE pointer और stdio.h के functions जैसे fopen, fprintf, fscanf और fclose इस्तेमाल करता है।
C में FILE pointer क्या है?
FILE pointer एक विशेष pointer है जो किसी खुली file को दर्शाता है। जब आप fopen call करते हैं, यह एक FILE * लौटाता है जिसे आप हर read, write और close function को देते हैं ताकि C जान सके कि किस file की बात है। fopen fail होने पर यह NULL लौटाता है।
fopen में "w" और "a" mode में क्या अंतर है?
Mode "w" file को लिखने के लिए खोलता है और किसी भी मौजूदा content को मिटा देता है, तो आप खाली file से शुरू करते हैं। Mode "a" (append) भी लिखता है, पर मौजूदा content रखता है और नया data अंत में जोड़ता है। Overwrite के लिए "w", और पुराना data खोए बिना जोड़ने के लिए "a" इस्तेमाल करें।
मुझे हमेशा यह क्यों जाँचना चाहिए कि fopen ने NULL तो नहीं लौटाया?
क्योंकि file खोलना fail हो सकता है — file मौजूद न हो, या आपके पास permission न हो। अगर fopen NULL लौटाए और आप फिर भी उस pointer को इस्तेमाल करें, तो program crash हो जाता है। खोलने के तुरंत बाद NULL जाँचना आपको error सुरक्षित रूप से संभालने देता है।
अगर मैं fclose call करना भूल जाऊँ तो क्या होगा?
आपका लिखा data किसी buffer में रह सकता है और असल में कभी file तक न पहुँचे, और file locked रहती है तथा उसके resources आरक्षित रहते हैं। fclose buffered data को disk पर भेजता है और file को छोड़ता है, इसलिए इसे भूलना data खो सकता है या resources leak कर सकता है।
← Back to C Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.