File Handling
कम्प्यूटर में डेटा को फाइल के रूप में स्टोर किया जाता है। अभी तक हमने जितने भी प्रोग्राम बनाए। वे प्रोग्राम आउटपुट को स्थाई रूप से स्टोर करने में सक्षम नहीं है। डेटा की स्थाई रूप से सेव करने के लिए उसे फाइल के रूप में स्टोर करना होता है। सी भाषा में हम अपने प्रोग्राम के आउटपुट को फाइल के रूप में भी स्टोर कर सकते हैं जिससे कि उसे भविष्य में पुन प्रयोग में लाया जा सके। हम अपने प्रोग्राम के माध्यम से फाइल से संबंधित कार्य कर सकते है।
⇉      फाइल में से Data को पढ़ना (Read)
⇉      फाइल में डेटा को लिखना (Write)
⇉      फाइल में और डेटा को जोड़ना (Append) 
उपरोक्त में से कोई भी कार्य करने के लिए निम्न ऑपरेशन करने होते हैं.
⇉      फाइल को कार्य से संबंधित मोड में खोलना फाइल पर इच्छित कार्य करना
⇉      फाइल को बंद करना
⇉      उपरोक्त विकल्पों को क्रम से समझते हैं
■ Opening a file
किसी फाइल को प्रोग्राम द्वारा प्रयोग में लेने के लिए पहले उसे ओपन किया जाता है। फाइल को Open करने के लिए हमें अपने प्रोग्राम में FILE Structure type (फाइल स्ट्रक्चर टाईप) का एक पॉइंटर डिक्लेयर करना होता है| FILE स्ट्रक्चर stdio.h फाइल में डिफाइन किया हुआ होता है।
किसी डेटा फाइल को प्रोग्राम में फंक्शन का प्रयोग करके निम्न प्रकार ओपन किया जाता है।
FILE *<rile pointer;
<file pointer>=fopen("file_name","mode")
Example:-
FILE *tp:
tp = fopen("tile_name", "mode");
File Modes
किसी फाइल में डेटा को पढ़ने लिखने या जोड़ने के लिए अलग-अलग मोड्स का प्रयोग किया जाता है। ये मोड्स निम्न प्रकार के होते हैं।
| Mode | Description | 
| r → | इस मोड का प्रयोग फाइल में से डेटा को पढ़ने के लिए किया जाता है। यदि फाइल पहले से ही मौजूद होती है तो वह खुल जाती है अन्यथा एरर आ जाएगी। | 
| w → | इस मोड का प्रयोग फाइल में डेटा को लिखने (स्टोर करने) के लिए किया जाता है। यदि फाइल पहले से मौजूद नहीं होती है तो नई फाइल बन जाती है अन्यथा वह over-right(ओवर राईट) हो जाती है। | 
| a → | इस मोड का प्रयोग फाइल में नया डेटा जोड़ने के लिए किया जाता है। यदि फाइल पहले से मौजूद नहीं होती है तो नई फाइल बन जाती है अन्यथा उसमें और डेटा जुड़ जाता है। | 
| r+ → | इस मोड का प्रयोग फाइल में से डेटा को पढ़ने तथा लिखने के लिए किया जाता है। | 
| w+ → | इस मोड का प्रयोग फाइल में से डेटा को पढ़ने तथा लिखाने के लिए किया जाता है। | 
| w+ → | इस मोड का प्रयोग फाइल में से डेटा को पढ़ने तथा लिखने के लिए किया जाता है। | 
■ Closing a file
फाइल से संबंधित कार्य पूरा हो जाता है तो उस फाइल को बंद करने के लिए fclose() funtion का प्रयोग किया जाता है।
File *fp;
fp = fopen("file_name", "mode");
.   .   .   .   .   .  .  .  .   .
.   .   .   .   .   .   .  .  .  . 
fclose(fp);
फाइलों पर विभिन्न ऑपरेशन हेतु फंक्शन
किसी फाइल पर किए जाने वाले विभिन्न ऑपरेशन के लिए सी में विभिन्न प्रकार के फंक्शन उपलब्ध है।
विभिन्न फंक्शन निम्न प्रकार है:-
putc() फंक्शन:-
इस फंक्शन का प्रयोग फाइल में एक अक्षर (कैरेक्टर) को स्टोर करने के लिए किया जाता है। इसे निम्न प्रकार से प्रयोग किया जाता है।
putc(char_variable, file_pointer);
उदाहरण:-
निम्न उदाहरण में एक नई फाइल बनाकर उसमें यूजर द्वारा इनपुट किया गया putc फंक्शन के माध्यम से डेटा स्टोर करवाया जा रहा हैं।
Output:-
Enter text and press ^c (Ctrl+z) when finished
This is demo of putc function. ^z
Data stored...
Explain Example:-
उपरोक्त उदाहरण में सर्वप्रथम FILE *f के माध्यम से फाइल पॉइंटर बनाया जा रहा है। इस पॉइंटर की सहायता से ही फाइल पर अन्य ऑपरेशन संभव हो पाएंगे। f=fopen("My.txt","w) के माध्यम से My.txt नाम की फाइल को write mode में ओपन करने की कोशिश की जा रही है। यदि फाइल ओपन हो जाती है तो पॉइंटर में उस फाइल का पॉइंटर स्टोर हो जाएगा। प्रोग्राम में आगे एक लूप चलाया गया है। यह लूप तक तक चलेगा जब तक कि यूजर कीबोर्ड से Ctrl बटन को दबाकर रखते हुएC बटन नहीं दबा देता। Ctrl+C से उत्पन्न हुए अक्षर को एड-ऑफ-फाइल (EOF) भी कहा जाता है। इसके लिए लूप में ch-getchar() के माध्यम से यूजर से इनपुट लेकर chh नाम के वेरिएबल में स्टोर करवाया जा रहा है, जिसे बाद में putc(ch, f) के माध्यम से फाइल में स्टोर करवा दिया गया है।
getc() Function:-
इस फक्शन का प्रयोग फाइल में एक अक्षर को पढ़ने के लिए किया जाता है। getc() फंक्शन में फाइल पॉइंटर किसी अक्षर को पढ़ने के बाद एक स्थान आगे की ओर खिसक जाता है तथा फाइल के अंत में पहुंचने पर EOF प्रतीक रिटर्न करता है। इस फंक्शन को निम्न प्रकार से प्रयोग किया जाता है
ch = gete(file_pointer);
Example:-
Output:-
Data of file:
This is a demo of pute function.
Explain Example:-
उपरोक्त उदाहरण में यह माना गया है कि करट फोल्डर में My.txt नाम की फाइल पहले से मौजूद है तथा उसमें This is a demo of putc function स्टोर है। यदि प्रोग्राम को न कराते समय करट फोल्डर में यह फाइल नहीं है तो पहले यह फाइल बना कर उसमें कुछ टेक्स्ट टाइप कर लें।
ध्यान दें कि फाइल ये डेटा पढ़ने के लिए फाइल को रीड (read) मोड में खोला गया है। तत्पश्चात् chegeto(1) के माध्यम से फाइल से एक-एक कैरेक्टर वेरिएबल के में स्टोर करवाया जा रहा है। साथ ही यह भी जाया जा रहा है कि ch में स्टोर किया गया कैरेक्टर एक-ऑफ-फाइल है। जैसे ही EOF मिलता है वैसे ही लूप भी समाप्त हो जाता है। लूप में ch में स्टोर किए गए कैरेक्टर को स्क्रीन पर प्रिंट करवा दिया गया है।putw() फंक्शन :-
Example:-
निम्न उदाहरण में एक नई फाइल बनाकर उसमें यूजर द्वारा इनपुट किया गया putw() के माध्यम से डेटा स्टोर करवाया जा रहा है
Output:-
getw() फंक्शन:-
Example:-
Output:-
1
2
3
4
5
6
7
8
9
10
Explain Example:-
उपरोक्त उदाहरण में My.txt नाम से नई फाइल बनाई जा रही है। वेरिएबल के आधार पर एक लूप चलाते हुए 1 से 10 तक संख्याएं उस फाइल में स्टोर करवाई जा रही है। तत्पश्चात् उसी फाइल को रीड मोड में खोलते हुए उसमें से इटीजर डेटा को getw() फंक्शन की सहायता से पढ़ा जा रहा है।
fprintf() फंक्शन:-
यह फंक्शन printf(...) के समकक्ष होता है। इस फंक्शन की सहायता से अलग-अलग प्रकार के डेटा को फाइल में एक साथ स्टोर किया जा सकता है।
 इसका प्रारूप निम्न प्रकार होता है। 
fprintf(file_pointer, "format", values);
Example:-
fscanf() फंक्शन:-
इस function की सहायता से अलग अलग प्रकार के data को फाइल में से एक साथ पढ़ा जा सकता हैं।
इसका प्रारूप निम्न होता हैं:
fscanf(file_pointer, "format", values);
Example:-
निम्न उदाहरण में fprintf() तथा fscanf() का प्रयोग किया गया हैं ।
Output:-
Enter Name and Salary for 3 employees
Mukesh     99034
Dashrath     98349
Denny     97345
Output :
 Name                   Salary
Mukesh                99034
Dashrath               98349
Denny                   97345
Explain Example:-
उपरोक्त उदाहरण में प्रथम लूप में fscanf() में कीबोर्ड (stdin) से डेटा इनपुट में लिया जा रहा है तथा fprintf() के माध्यम से उसी डेटा को फाइल में स्टोर करवाया जा रहा है। द्वितीय लूप में fscanf() में उसी फाइल से डेटा इनपुट में लेते हुए fprintf() के माध्यम से स्क्रीन पर (stdout) प्रिंट करवाया जा रहा है। fprintf() प्रयोग किया गया %-8s यह दर्शाता है कि स्ट्रिंग को 8 अक्षरों के फील्ड में प्रिंट किया जाए तथा - यह दर्शाता है कि उसे लेफ्ट अलाइड प्रिंट किया जाए। इसी प्रकार %15d का आशय है कि प्रिंट किए जाने वाले इंटीजर को 15 के फील्ड में प्रिंट किया जाए।
feof() फंक्शन:-
इस फंक्शन का प्रयोग यह ज्ञात करने के लिए किया जाता है कि फाइल का अंत (end of file position) आ गया है अथवा नहीं। इस फंक्शन में FILE पॉइंटर का प्रयोग आरग्यूमेंट की तरह किया। जाता है। feof() फंक्शन end of file आ जाने पर नॉन जीरो बैल्यू रिटर्न करता है अन्यथा जीरो रिटर्न करता है।
Example:-
निम्न उदाहरण में feof() का प्रयोग स्पष्ट किया गया है:-
Output:-
1
2
3
4
5
6
7
8
9
10
End Of File..
Explain Example:-
उपरोक्त उदाहरण में एक लूप चलाते हुए 1 से 10 तक की संख्याएं फाइल में स्टोर करवाई जा रही है। इसी फाइल को वापस रोड मोड में खोला जा रहा है। उसमें से डेटा को पढ़ने के लिए लूप में feof() के माध्यम से जांच की जा रही है कि क्या एड-ऑफ-फाइल आ गया है। यदि ऐसा होता है तो लूप को वहीं पर break, के माध्यम से रोक दिया गया है। यह ध्यान दें कि getw() तथा putw() के साथ EOF की जगह पर feof) फंक्शन का ही प्रयोग किया जाना चाहिए।
fseek() फंक्शन:-
इस फंक्शन का प्रयोग फाइल में किसी निश्चित स्थान पर जाने के लिए किया जाता है।
इसका प्रारूप निम्न होता है:
fseek(file_pointer, offset, position);
यहाँ offset से अर्थ उस value (long type की ) से हैं जितने अक्षर फाइल में आगे या पीछे की ओर जाने हों तथा position फाइल के प्रारंभ, अंत तथा पॉइन्टर के करंट स्थान को प्रदर्शित करता हैं।
| Position value | Meaning | 
| 0 | Begin of file | 
| 1 | Current Position | 
| 2 | End Of File | 
Example:-
निम्न Example में यह मानते हुए कि Mukesh.txt फाइल में निम्नांकित टेक्स्ट हैं, fseek() का प्रयोग दर्शाया गया हैं। 
Hello this is a demo file.
Output:-
H t i s
Explain Example:-
उपरोक्त उदाहरण में सर्वप्रथम NULL) के माध्यम से यह जांच की जा रही है कि क्या फाइल सफलता पूर्वक ओपन हो गई है। यदि फाइल सफलता पूर्वक ओपन नहीं होती है तो फाइल पॉइंटर में null स्टोर हो जाएगा, जिसके कारण से Error occured in file opening संदेश प्रिंट होते हुए exit ) के कारण प्रोग्राम समाप्त हो जाएगा। तत्पश्चात् eck() प्रत्येक बार वेरिएबल p में स्टोर वैल्यू के अनुसार फाइल पॉइट को मूस कर रहा है। जब यह संख् पॉजिटिव (धनात्मक) है तब पॉइंटर आगे की तरफ तथा जब वह वैल्यू नेगेटिव (ऋणात्मक) तब पॉइंटर पीछे की तरफ मूव हो रहा है।
0 Comments