C फ़ाइल I/O: फ़ाइल बनाएँ, खोलें, पढ़ें, लिखें और बंद करें
सी फ़ाइल प्रबंधन
फ़ाइल का उपयोग बड़ी मात्रा में स्थायी डेटा संग्रहीत करने के लिए किया जा सकता है। कई अन्य भाषाओं की तरह 'C' निम्नलिखित फ़ाइल प्रबंधन फ़ंक्शन प्रदान करता है,
- फ़ाइल का निर्माण
- फ़ाइल खोलना
- फ़ाइल पढ़ना
- फ़ाइल में लिखना
- फ़ाइल बंद करना
'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 फ़ंक्शन फ़ाइल पॉइंटर को तर्क के रूप में लेता है। फ़ाइल पॉइंटर से जुड़ी फ़ाइल को fclose फ़ंक्शन की मदद से बंद किया जाता है। अगर फ़ाइल बंद करने में कोई त्रुटि हुई है तो यह 0 लौटाता है और अगर फ़ाइल बंद करने में कोई त्रुटि हुई है तो EOF (फ़ाइल का अंत) लौटाता है।
फ़ाइल बंद करने के बाद, उसी फ़ाइल पॉइंटर का उपयोग अन्य फ़ाइलों के साथ भी किया जा सकता है।
'सी' प्रोग्रामिंग में, प्रोग्राम समाप्त होने पर फ़ाइलें स्वचालित रूप से बंद हो जाती हैं। fclose फ़ंक्शन लिखकर मैन्युअल रूप से फ़ाइल बंद करना एक अच्छा प्रोग्रामिंग अभ्यास है।
एक फ़ाइल के लिए लेखन
C में, जब आप किसी फ़ाइल में लिखते हैं, तो न्यूलाइन वर्ण '\n' को स्पष्ट रूप से जोड़ा जाना चाहिए।
stdio लाइब्रेरी फ़ाइल में लिखने के लिए आवश्यक फ़ंक्शन प्रदान करती है:
- fputc(चरित्र, फ़ाइल_पॉइंटर): यह file_pointer द्वारा इंगित फ़ाइल में एक वर्ण लिखता है।
- fputs(स्ट्र, फ़ाइल_पॉइंटर): यह file_pointer द्वारा इंगित फ़ाइल में एक स्ट्रिंग लिखता है।
- fprintf(फ़ाइल_पॉइंटर, स्ट्रिंग, वेरिएबल_सूचियाँ): यह फ़ाइल_पॉइंटर द्वारा इंगित की गई फ़ाइल के लिए एक स्ट्रिंग प्रिंट करता है। स्ट्रिंग में वैकल्पिक रूप से प्रारूप विनिर्देशक और चर 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(फ़ाइल_पॉइंटर): यह फ़ाइल पॉइंटर द्वारा इंगित फ़ाइल से अगला अक्षर लौटाता है। जब फ़ाइल का अंत आ जाता है, तो EOF वापस भेज दिया जाता है।
- fgets(बफर, एन, फ़ाइल_पॉइंटर): यह फ़ाइल से n-1 अक्षर पढ़ता है और स्ट्रिंग को बफर में संग्रहीत करता है जिसमें NULL अक्षर '\0' को अंतिम अक्षर के रूप में जोड़ा जाता है।
- fscanf(फ़ाइल_पॉइंटर, रूपांतरण_विनिर्देशक, वेरिएबल_एड्रेस): इसका उपयोग डेटा को पार्स और विश्लेषण करने के लिए किया जाता है। यह फ़ाइल से वर्णों को पढ़ता है और इनपुट को एक सूची में असाइन करता है परिवर्तनीय संकेत रूपांतरण विनिर्देशकों का उपयोग करके 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() का उपयोग मुख्य रूप से फ़ाइल से डेटा निकालने और पार्स करने के लिए किया जाता है।
- फ़ाइल की शुरुआत में पॉइंटर फ़ाइल को रीसेट करने के लिए फ़ाइल को फिर से खोलें। 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 फ़ंक्शन का उपयोग करके पुनः बंद कर दिया जाता है।
सारांश
- फ़ाइल मेमोरी में वह स्थान है जहां डेटा संग्रहीत किया जाता है।
- 'सी' प्रोग्रामिंग एक फ़ाइल से निपटने के लिए विभिन्न फ़ंक्शन प्रदान करती है।
- फ़ाइलों के साथ छेड़छाड़ करने की प्रणाली को फ़ाइल प्रबंधन कहा जाता है।
- किसी फ़ाइल पर कोई भी कार्य करने से पहले उसे खोलना आवश्यक है।
- किसी फ़ाइल को पढ़ने, लिखने या जोड़ने के मोड में खोला जा सकता है।
- Getc और putc फ़ंक्शन का उपयोग एकल वर्ण को पढ़ने और लिखने के लिए किया जाता है।
- फ़ंक्शन fscanf() किसी फ़ाइल से डेटा पढ़ने और पार्स करने की अनुमति देता है
- हम पढ़ सकते हैं (का उपयोग करके) गेटसी फ़ंक्शन) EOF आने तक संपूर्ण फ़ाइल को कवर करने के लिए लूपिंग द्वारा संपूर्ण फ़ाइल
- हम फ़ंक्शन का उपयोग करके फ़ाइल का नाम बनाने के बाद उसमें लिख सकते हैं एफप्रिंटफ () और इसमें स्ट्रिंग टेक्स्ट के अंत में नया लाइन वर्ण होना चाहिए।