C फ़ाइल I/O: फ़ाइल बनाएँ, खोलें, पढ़ें, लिखें और बंद करें
⚡ स्मार्ट सारांश
C में फ़ाइल हैंडलिंग stdio लाइब्रेरी के माध्यम से डिस्क पर स्थायी डेटा संग्रहीत करती है, जो fopen के साथ एक फ़ाइल खोलती है, fputc, fputs, या fprintf के साथ लिखती है, fgetc, fgets, या fscanf के साथ पढ़ती है, और fclose का उपयोग करके इसे बंद करती है।
सी फ़ाइल प्रबंधन
एक फ़ाइल का उपयोग बड़ी मात्रा में स्थायी डेटा को संग्रहीत करने के लिए किया जा सकता है। कई अन्य भाषाओं की तरह, 'सी' निम्नलिखित फ़ाइल प्रबंधन सुविधाएँ प्रदान करती है। कार्यों,
- फ़ाइल का निर्माण
- फ़ाइल खोलना
- फ़ाइल पढ़ना
- फ़ाइल में लिखना
- फ़ाइल बंद करना
'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"); }
आउटपुट:
फ़ाइल उसी फ़ोल्डर में बनाई जाती है जहाँ आपने अपना कोड सहेजा है।
आप वह पथ निर्दिष्ट कर सकते हैं जहाँ आप अपनी फ़ाइल बनाना चाहते हैं
#include <stdio.h> int main() { FILE *fp; fp = fopen ("D://data.txt", "w"); }
फ़ाइल कैसे बंद करें
जब भी फ़ाइल पर काम पूरा हो जाए, तो फ़ाइल को हमेशा बंद कर देना चाहिए। इसका मतलब है कि फ़ाइल की सामग्री और लिंक समाप्त हो गए हैं। इससे फ़ाइल को होने वाली आकस्मिक क्षति से बचा जा सकता है।
'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; }
आउटपुट:
उपरोक्त प्रोग्राम fputc_test.txt फ़ाइल में एक-एक अक्षर तब तक लिखता है जब तक कि अगली पंक्ति का चिह्न “\n” न आ जाए, जो यह दर्शाता है कि वाक्य सफलतापूर्वक लिखा गया है। इस प्रक्रिया में, ऐरे के प्रत्येक अक्षर को लेकर फ़ाइल में लिखा जाता है।
- उपरोक्त प्रोग्राम में, हमने fputc_test.txt नामक एक फाइल बनाई है और उसे राइट मोड में खोला है तथा अपनी स्ट्रिंग घोषित की है, जिसे फाइल में लिखा जाएगा।
- हम 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); }
आउटपुट:
- उपरोक्त प्रोग्राम में, हमने fputs_test.txt नामक एक फ़ाइल बनाई और उसे लेखन मोड में खोला है।
- fputs() फ़ंक्शन का उपयोग करके तीन अलग-अलग स्ट्रिंग लिखकर राइट ऑपरेशन करने के बाद
- फिर फ़ाइल को 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; }
आउटपुट:
- उपरोक्त प्रोग्राम में हमने fprintf_test.txt नामक एक फाइल बनाई और उसे लेखन मोड में खोला है।
- स्ट्रिंग लिखकर 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
- उपरोक्त प्रोग्राम में, हमने “fprintf_test.txt” नामक फ़ाइल खोली है, जिसे पहले fprintf() फ़ंक्शन का उपयोग करके लिखा गया था, और इसमें “Learning C with” लिखा है। Guru99” स्ट्रिंग। हम इसे fgets() फ़ंक्शन का उपयोग करके पढ़ते हैं, जो पंक्ति दर पंक्ति पढ़ता है, जहाँ बफ़र का आकार पूरी पंक्ति को संभालने के लिए पर्याप्त होना चाहिए।
- हम फ़ाइल को दोबारा खोलते हैं ताकि पॉइंटर फ़ाइल को फ़ाइल की शुरुआत में रीसेट किया जा सके। प्रत्येक शब्द को अलग-अलग संभालने के लिए विभिन्न स्ट्रिंग वैरिएबल बनाएं। उनकी सामग्री देखने के लिए वैरिएबल प्रिंट करें। fscanf() का उपयोग मुख्य रूप से एक्सप्रेशन के लिए किया जाता है।tracकिसी फाइल से डेटा को पढ़ना और पार्स करना।
- फ़ाइल की शुरुआत में पॉइंटर फ़ाइल को रीसेट करने के लिए फ़ाइल को फिर से खोलें। EOF स्टेटमेंट मिलने तक getc() फ़ंक्शन का उपयोग करके फ़ाइल से अक्षर दर अक्षर डेटा पढ़ें और प्रिंट करें
- विभिन्न प्रकारों का उपयोग करके फ़ाइल पढ़ने का ऑपरेशन करने के बाद, हमने फिर से 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; }
आउटपुट:
- उपरोक्त प्रोग्राम में हमने डेमो नामक एक फाइल बनाई है और उसे राइट मोड में खोला है।
- लेखन कार्य निष्पादित होने के बाद, फ़ाइल को fclose फ़ंक्शन का उपयोग करके बंद कर दिया जाता है।
- हमने फिर से एक फ़ाइल खोली है जिसमें अब रीडिंग मोड में डेटा है। जब तक eof नहीं मिल जाता, while लूप निष्पादित होगा। एक बार फ़ाइल का अंत मिल जाने पर ऑपरेशन समाप्त हो जाएगा और printf फ़ंक्शन का उपयोग करके डेटा प्रदर्शित किया जाएगा।
- पढ़ने का कार्य करने के बाद फ़ाइल को fclose फ़ंक्शन का उपयोग करके पुनः बंद कर दिया जाता है।












