file input/output in c in hindi|सी में फाइल हैंडलिंग क्या है ?

सी में फाइल हैंडलिंग क्या है ?

सी में फाइल हैंडलिंग क्या है ?

इस ट्यूटोरियल में, आप सी में फाइल हैंडलिंग के बारे में जानेंगे। आप सी में मानक I/O को fprintf(), fscanf(), fread(), fwrite(), fseek() आदि की मदद से संभालना सीखेंगे। उदाहरण।

एक फ़ाइल कंप्यूटर स्टोरेज उपकरणों में एक कंटेनर है जिसका उपयोग डेटा संग्रहीत करने के लिए किया जाता है।

फ़ाइलों की आवश्यकता क्यों है?

  • जब कोई प्रोग्राम समाप्त होता है, तो संपूर्ण डेटा खो जाता है। फ़ाइल में संग्रहीत करने से प्रोग्राम समाप्त होने पर भी आपका डेटा सुरक्षित रहेगा।
  • यदि आपको बड़ी संख्या में डेटा दर्ज करना है, तो उन सभी को दर्ज करने में बहुत समय लगेगा।
  • हालाँकि, यदि आपके पास सभी डेटा वाली फ़ाइल है, तो आप C में कुछ कमांड का उपयोग करके फ़ाइल की सामग्री को आसानी से एक्सेस कर सकते हैं।
  • आप अपने डेटा को एक कंप्यूटर से दूसरे कंप्यूटर में बिना किसी बदलाव के आसानी से स्थानांतरित कर सकते हैं।

फाइलों के प्रकार|

फाइलों के साथ काम करते समय, आपको दो प्रकार की फाइलों के बारे में पता होना चाहिए|

  1. Text files
  2. Binary files

1. Text files

टेक्स्ट फ़ाइलें सामान्य .txt फ़ाइलें होती हैं। आप किसी भी साधारण टेक्स्ट एडिटर जैसे नोटपैड का उपयोग करके आसानी से टेक्स्ट फाइल बना सकते हैं।

जब आप उन फ़ाइलों को खोलते हैं, तो आप फ़ाइल की सभी सामग्री को सादे पाठ के रूप में देखेंगे। आप सामग्री को आसानी से संपादित या हटा सकते हैं।

वे आसान बनाए रखने के लिए न्यूनतम प्रयास करते हैं, आसानी से पठनीय होते हैं, और कम से कम सुरक्षा प्रदान करते हैं और अधिक स्टोरेज स्पेस लेते हैं।

2. Binary files

बाइनरी फ़ाइलें आपके कंप्यूटर में अधिकतर .bin फ़ाइलें होती हैं।

डेटा को प्लेन टेक्स्ट में स्टोर करने के बजाय, वे इसे बाइनरी फॉर्म (0 और 1 के) में स्टोर करते हैं।

वे अधिक मात्रा में डेटा धारण (hold)कर सकते हैं, यह आसानी से पढ़ने योग्य नहीं हैं, और टेक्स्ट फ़ाइलों की तुलना में बेहतर सुरक्षा प्रदान करते हैं।

फ़ाइल ऑपरेशन

सी में, आप फाइलों पर चार प्रमुख ऑपरेशन कर सकते हैं, या तो टेक्स्ट या बाइनरी:

एक नई फाइल बनाना(Creating a new file)
मौजूदा फ़ाइल खोलना(Opening an existing file)
फ़ाइल से जानकारी पढ़ना और लिखना(Reading from and writing information to a file)
फ़ाइल बंद करना(Closing a file)

फाइलों के साथ काम करना

फ़ाइलों के साथ काम करते समय, आपको फ़ाइल के प्रकार का सूचक घोषित (declare a pointer)करने की आवश्यकता होती है। फ़ाइल और प्रोग्राम के बीच संचार के लिए यह घोषणा(declaration is needed)आवश्यक है।

FILE *fptr;

फ़ाइल खोलना – निर्माण और संपादन के लिए

फ़ाइल को खोलना fopen () फ़ंक्शन का उपयोग करके किया जाता है जिसे stdio.h हेडर फ़ाइल में परिभाषित किया गया है।

मानक I/O में फ़ाइल खोलने का सिंटैक्स है:

ptr = fopen("fileopen","mode");

उदाहरण के लिए,

fopen("E:\\cprogram\\newprogram.txt","w");

fopen("E:\\cprogram\\oldprogram.bin","rb");
  • मान लें कि फ़ाइल newprogram.txt स्थान E:\cprogram में मौजूद नहीं है। पहला फ़ंक्शन newprogram.txt नाम की एक नई फ़ाइल बनाता है और इसे ‘w’ मोड के अनुसार लिखने के लिए खोलता है। लेखन मोड आपको फ़ाइल की सामग्री को बनाने और संपादित करने (अधिलेखित) करने की अनुमति देता है।
  • अब मान लेते हैं कि दूसरी बाइनरी फ़ाइल oldprogram.bin स्थान E:\cprogram में मौजूद है। दूसरा फ़ंक्शन मौजूदा फ़ाइल को बाइनरी मोड ‘आरबी’ में पढ़ने के लिए खोलता है। रीडिंग मोड केवल आपको फ़ाइल को पढ़ने की अनुमति देता है, आप फ़ाइल में नहीं लिख सकते।
Opening Modes in Standard I/O
ModeMeaning of ModeDuring Inexistence of file
rपढ़ने के लिएयदि फ़ाइल मौजूद नहीं है, तो fopen () NULL लौटाता है।
rbबाइनरी मोड में पढ़ने के लिए|यदि फ़ाइल मौजूद नहीं है, तो fopen () NULL लौटाता है।
wलेखन के लिए|यदि फ़ाइल मौजूद है, तो इसकी सामग्री को अधिलेखित कर दिया जाता है।
यदि फ़ाइल मौजूद नहीं है, तो इसे बनाया जाएगा।
wbबाइनरी मोड में लिखने के लिए|यदि फ़ाइल मौजूद है, तो इसकी सामग्री को अधिलेखित कर दिया जाता है।
यदि फ़ाइल मौजूद नहीं है, तो इसे बनाया जाएगा।
aपरिशिष्ट के लिए खुला।
डेटा फ़ाइल के अंत में जोड़ा जाता है।
यदि फ़ाइल मौजूद नहीं है, तो इसे बनाया जाएगा।
abबाइनरी मोड में एपेंड के लिए खोलें।
डेटा फ़ाइल के अंत में जोड़ा जाता है।
यदि फ़ाइल मौजूद नहीं है, तो इसे बनाया जाएगा।
r+पढ़ने और लिखने दोनों के लिए|यदि फ़ाइल मौजूद नहीं है, तो fopen () NULL लौटाता है।
rb+बाइनरी मोड में पढ़ने और लिखने दोनों के लिए|यदि फ़ाइल मौजूद नहीं है, तो fopen () NULL लौटाता है।
w+पढ़ने और लिखने दोनों के लिए|यदि फ़ाइल मौजूद है, तो इसकी सामग्री को अधिलेखित कर दिया जाता है।
यदि फ़ाइल मौजूद नहीं है, तो इसे बनाया जाएगा।
wb+बाइनरी मोड में पढ़ने और लिखने दोनों के लिए|यदि फ़ाइल मौजूद है, तो इसकी सामग्री को अधिलेखित कर दिया जाता है।
यदि फ़ाइल मौजूद नहीं है, तो इसे बनाया जाएगा।
a+पढ़ने और जोड़ने दोनों के लिए|यदि फ़ाइल मौजूद नहीं है, तो इसे बनाया जाएगा।
ab+बाइनरी मोड में पढ़ने और जोड़ने दोनों के लिए|यदि फ़ाइल मौजूद नहीं है, तो इसे बनाया जाएगा।

एक फाइल बंद करना|

फ़ाइल (टेक्स्ट और बाइनरी दोनों) को पढ़ने/लिखने के बाद बंद कर दिया जाना चाहिए।

फ़ाइल को बंद करना fclose () फ़ंक्शन का उपयोग करके किया जाता है।

fclose(fptr);

यहां, fptr एक फाइल पॉइंटर है जो बंद होने वाली फाइल से जुड़ा है।

टेक्स्ट फ़ाइल को पढ़ना और लिखना

टेक्स्ट फ़ाइल को पढ़ने और लिखने के लिए, हम fprintf() और fscanf() फ़ंक्शंस का उपयोग करते हैं।

वे प्रिंटफ () और स्कैनफ () के सिर्फ फाइल संस्करण हैं। अंतर केवल इतना है कि fprintf() और fscanf() संरचना फ़ाइल के लिए एक सूचक की अपेक्षा करता है।

Example 1:- टेक्स्ट फ़ाइल में लिखें|

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int num;
   FILE *fptr;

   // use appropriate location if you are using MacOS or Linux
   fptr = fopen("C:\\program.txt","w");

   if(fptr == NULL)
   {
      printf("Error!");   
      exit(1);             
   }

   printf("Enter num: ");
   scanf("%d",&num);

   fprintf(fptr,"%d",num);
   fclose(fptr);

   return 0;
}

यह प्रोग्राम यूजर से एक नंबर लेता है और प्रोग्राम.txt फाइल में स्टोर करता है।

इस प्रोग्राम को संकलित करने और चलाने के बाद, आप अपने कंप्यूटर के C ड्राइव में बनाई गई एक टेक्स्ट फ़ाइल प्रोग्राम.txt देख सकते हैं। जब आप फ़ाइल खोलते हैं, तो आप अपने द्वारा दर्ज किया गया पूर्णांक देख सकते हैं।

Example 2 :- टेक्स्ट फ़ाइल से पढ़ें|

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int num;
   FILE *fptr;

   if ((fptr = fopen("C:\\program.txt","r")) == NULL){
       printf("Error! opening file");

       // Program exits if the file pointer returns NULL.
       exit(1);
   }

   fscanf(fptr,"%d", &num);

   printf("Value of n=%d", num);
   fclose(fptr); 
  
   return 0;
}

यह प्रोग्राम program.txt फ़ाइल में मौजूद पूर्णांक को पढ़ता है और इसे स्क्रीन पर प्रिंट करता है।

यदि आपने उदाहरण 1 से सफलतापूर्वक फ़ाइल बनाई है, तो इस प्रोग्राम को चलाने से आपको वह पूर्णांक प्राप्त होगा जो आपने दर्ज किया था।

अन्य कार्यों जैसे fgetchar(), fputc() आदि का उपयोग इसी तरह से किया जा सकता है।

बाइनरी फ़ाइल को पढ़ना और लिखना

बाइनरी फाइलों के मामले में फंक्शन फ़्रेड () और फ्राइट () का उपयोग डिस्क पर फ़ाइल से पढ़ने और लिखने के लिए क्रमशः किया जाता है।

बाइनरी फ़ाइल में लिखना

बाइनरी फ़ाइल में लिखने के लिए, आपको fwrite() फ़ंक्शन का उपयोग करने की आवश्यकता है। कार्य चार तर्क लेते हैं:

  1. डिस्क में लिखे जाने वाले डेटा का पता
  2. डिस्क में लिखे जाने वाले डेटा का आकार
  3. इस प्रकार के डेटा की संख्या
  4. उस फ़ाइल का सूचक जहाँ आप लिखना चाहते हैं।
fwrite(addressData, sizeData, numbersData, pointerToFile);

Example 3 :- fwrite () का उपयोग करके बाइनरी फ़ाइल में लिखें|

#include <stdio.h>
#include <stdlib.h>

struct threeNum
{
   int n1, n2, n3;
};

int main()
{
   int n;
   struct threeNum num;
   FILE *fptr;

   if ((fptr = fopen("C:\\program.bin","wb")) == NULL){
       printf("Error! opening file");

       // Program exits if the file pointer returns NULL.
       exit(1);
   }

   for(n = 1; n < 5; ++n)
   {
      num.n1 = n;
      num.n2 = 5*n;
      num.n3 = 5*n + 1;
      fwrite(&num, sizeof(struct threeNum), 1, fptr); 
   }
   fclose(fptr); 
  
   return 0;
}

इस प्रोग्राम में, हम C ड्राइव में एक नई फाइल प्रोग्राम.बिन बनाते हैं।

हम तीन संख्याओं – n1, n2 और n3 के साथ एक संरचना तीन संख्या घोषित करते हैं, और इसे मुख्य कार्य में संख्या के रूप में परिभाषित करते हैं।

अब, लूप के अंदर, हम fwrite () का उपयोग करके मान को फ़ाइल में संग्रहीत करते हैं।

पहला पैरामीटर संख्या का पता लेता है और दूसरा पैरामीटर संरचना का आकार तीनNum लेता है।

चूंकि हम केवल num का एक उदाहरण सम्मिलित कर रहे हैं, तीसरा पैरामीटर 1 है। और, अंतिम पैरामीटर *fptr उस फ़ाइल को इंगित करता है जिसे हम डेटा संग्रहीत कर रहे हैं।

अंत में, हम फ़ाइल को बंद करते हैं।

बाइनरी फ़ाइल से पढ़ना

फ़ंक्शन फ़्रेड () भी ऊपर दिए गए fwrite () फ़ंक्शन के समान 4 तर्क लेता है।

fread(addressData, sizeData, numbersData, pointerToFile);

Example 4 :- fread() का उपयोग करके बाइनरी फ़ाइल से पढ़ें|

#include <stdio.h>
#include <stdlib.h>

struct threeNum
{
   int n1, n2, n3;
};

int main()
{
   int n;
   struct threeNum num;
   FILE *fptr;

   if ((fptr = fopen("C:\\program.bin","rb")) == NULL){
       printf("Error! opening file");

       // Program exits if the file pointer returns NULL.
       exit(1);
   }

   for(n = 1; n < 5; ++n)
   {
      fread(&num, sizeof(struct threeNum), 1, fptr); 
      printf("n1: %d\tn2: %d\tn3: %d\n", num.n1, num.n2, num.n3);
   }
   fclose(fptr); 
  
   return 0;
}

इस प्रोग्राम में आप एक ही फाइल प्रोग्राम.बिन और लूप को एक-एक करके रिकॉर्ड्स में पढ़ते हैं।

सरल शब्दों में, आप संरचना संख्या में *fptr द्वारा इंगित फ़ाइल से तीनNum आकार का एक तीनNum रिकॉर्ड पढ़ते हैं।

आपको वही रिकॉर्ड मिलेंगे जो आपने उदाहरण 3 में डाले थे।

fseek() का उपयोग कर डेटा प्राप्त करना

यदि आपके पास फ़ाइल के अंदर कई रिकॉर्ड हैं और किसी विशिष्ट स्थान पर रिकॉर्ड तक पहुंचने की आवश्यकता है, तो आपको रिकॉर्ड प्राप्त करने से पहले सभी रिकॉर्ड्स को लूप करना होगा।

यह बहुत सारी मेमोरी और ऑपरेशन का समय बर्बाद करेगा। आवश्यक डेटा प्राप्त करने का एक आसान तरीका fseek () का उपयोग करके प्राप्त किया जा सकता है।

जैसा कि नाम से पता चलता है, fseek() फ़ाइल में दिए गए रिकॉर्ड के लिए कर्सर की तलाश करता है।

fseek() का सिंटैक्स देखे:-

fseek(FILE * stream, long int offset, int whence);

पहला पैरामीटर स्ट्रीम फ़ाइल का सूचक है। दूसरा पैरामीटर खोजे जाने वाले रिकॉर्ड की स्थिति है, और तीसरा पैरामीटर उस स्थान को निर्दिष्ट करता है जहां ऑफ़सेट प्रारंभ होता है।

Different whence in fseek()

WhenceMeaning
SEEK_SETफ़ाइल की शुरुआत से ऑफ़सेट प्रारंभ करता है।
SEEK_ENDफ़ाइल के अंत से ऑफ़सेट प्रारंभ करता है।
SEEK_CURफ़ाइल में कर्सर के वर्तमान स्थान से ऑफ़सेट प्रारंभ करता है।

Example 5:- fseek()

#include <stdio.h>
#include <stdlib.h>

struct threeNum
{
   int n1, n2, n3;
};

int main()
{
   int n;
   struct threeNum num;
   FILE *fptr;

   if ((fptr = fopen("C:\\program.bin","rb")) == NULL){
       printf("Error! opening file");

       // Program exits if the file pointer returns NULL.
       exit(1);
   }
   
   // Moves the cursor to the end of the file
   fseek(fptr, -sizeof(struct threeNum), SEEK_END);

   for(n = 1; n < 5; ++n)
   {
      fread(&num, sizeof(struct threeNum), 1, fptr); 
      printf("n1: %d\tn2: %d\tn3: %d\n", num.n1, num.n2, num.n3);
      fseek(fptr, -2*sizeof(struct threeNum), SEEK_CUR);
   }
   fclose(fptr); 
  
   return 0;
}

यह प्रोग्राम प्रोग्राम.बिन फ़ाइल से रिकॉर्ड्स को उल्टे क्रम में पढ़ना शुरू कर देगा (अंतिम से पहले) और इसे प्रिंट करता है।

निष्कर्ष:-

इस पोस्ट में बस इतना ही हम अगले टॉपिक पर नेक्स्ट पोस्ट में बात करेंगे | c language में, मेने सी में फाइल हैंडलिंग क्या है ? तक इस पोस्ट में कवर कर लिया है| जल्द ही हम c language का tutorial पूरा करेंगे और c language पर प्रोग्राम केसे बनाते है| ये भी सिखायेंगे आप साथ ही साथ पुरानी पोस्ट भी पढ़ कर अपना अब्यास जारी रख सकते है| जिससे आपको c language के आने वाले टॉपिक अच्छे से समझ आयेंगे और आपको c language और भी ज्यादा आसान लगेगी | इसी तरह पढ़ते रहे और इस वेबसाइट को follow जरुर कर ले जिससे हमारी आने वाली पोस्ट आप तक सबसे पहले पहुचे|

धन्यवाद |

Previous articleoperator overloading in c++ example in hindi | operator overloading in c++ full details.
Next articleWhere is C programming language used or uses of C language?|c interview questions and answers for freshers

LEAVE A REPLY

Please enter your comment!
Please enter your name here