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 से होता है।
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 मिटाता है |
मौजूदा file को "w" mode में खोलना उसमें सब कुछ तुरंत मिटा देता है। पुराना data रखना हो तो "a" इस्तेमाल करें।
File में लिखना
Write mode में खुलने के बाद, fprintf बिल्कुल printf जैसा काम करता है पर text file में भेजता है।
#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;
}Data likha gaya.
data.txt के अंदर:
Hello, file!
Marks: 95
File से पढ़ना
पढ़ने के लिए file को "r" mode में खोलें और fgets (lines के लिए) या fscanf (formatted values के लिए) इस्तेमाल करें।
#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;
}Hello, file!
Marks: 95
fgets loop तब तक पढ़ता रहता है जब तक वह NULL न लौटाए, जो file के अंत को दर्शाता है।
हमेशा जाँचें और बंद करें
दो आदतें file handling को सुरक्षित और भरोसेमंद बनाती हैं:
fopenके तुरंत बाद NULL जाँचें — file गायब या locked हो सकती है।- काम पूरा होने पर fclose करें — यह buffered data को disk पर भेजता है और file को छोड़ता है।
आपका लिखा text अक्सर पहले किसी buffer में रहता है। fclose (या fflush) ही उसे असल में file में डालता है। इसे छोड़ें तो आप अपने data का आख़िरी हिस्सा खो सकते हैं।
आम गलतियाँ
FILEpointer को पहले NULL जाँचे बिना इस्तेमाल करना।- मौजूदा file को
"w"में खोलकर गलती से उसे मिटा देना। fcloseभूलना, जिससे buffered data खो सकता है।- Write mode में खुली file को पढ़ने की कोशिश, या read-only खुली में लिखने की।
एक program लिखें जो हर बार चलने पर log.txt में एक नई line जोड़े (mode "a"), फिर दूसरा program जो पूरा log पढ़कर print करे। पहले वाले को तीन बार चलाएँ और पुष्टि करें कि log बढ़ता है।
सारांश
- File handling
FILEpointer औरstdio.hfunctions से 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 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 में क्या अंतर है?
"w" file को लिखने के लिए खोलता है और किसी भी मौजूदा content को मिटा देता है, तो आप खाली file से शुरू करते हैं। Mode "a" (append) भी लिखता है, पर मौजूदा content रखता है और नया data अंत में जोड़ता है। Overwrite के लिए "w", और पुराना data खोए बिना जोड़ने के लिए "a" इस्तेमाल करें।मुझे हमेशा यह क्यों जाँचना चाहिए कि fopen ने NULL तो नहीं लौटाया?
fopen NULL लौटाए और आप फिर भी उस pointer को इस्तेमाल करें, तो program crash हो जाता है। खोलने के तुरंत बाद NULL जाँचना आपको error सुरक्षित रूप से संभालने देता है।अगर मैं fclose call करना भूल जाऊँ तो क्या होगा?
fclose buffered data को disk पर भेजता है और file को छोड़ता है, इसलिए इसे भूलना data खो सकता है या resources leak कर सकता है।