File Handling In C++ (part-1)

    Computer में Data को file के रूप में स्टोर किया जाता है। अभी तक हमने जितने भी प्रोग्राम बनाए है ये प्रोग्राम Output को स्थाई रूप से स्टोर करने में सक्षम नहीं है। Data को स्थाई रूप से सेव करने के लिए उसे फाइल के रूप में स्टोर करना होता है। 'C++' Language में हम अपने प्रोग्राम के Output को File के रूप में भी स्टोर कर सकते हैं जिससे कि उसे भविष्य में पुनः प्रयोग में लाया जा सके। किसी भी File पर Operation करने के लिए तीन कार्य करने होते हैं,

    1. open a file for read or write (फाइल को read या write के लिए ओपन करना)
    2. working on file (फाइल पर कार्य करना)
    3. close the file (फाइल बंद करना)

    C++ में File handling stream(स्ट्रीम) के माध्यम से की जाती है। stream(स्ट्रीम) से आशय bites(बाइट्स) के क्रम से होता है। जो stream Program को input उपलब्ध कराती है उसे source stream (input stream) तथा जिस stream को प्रोग्राम द्वारा Output प्रदान किया जाता है उसे destination stream (output stream) कहा जाता है।

    सरल शब्दों में कहा जा सकता है कि प्रोग्राम को source stream(सोर्स स्ट्रीम) से इनपुट मिलता है तथा Destination stream(डेस्टिनेशन स्ट्रीम) को आउटपुट भेजा जाता है। source stream(सोर्स स्ट्रीम) को डेटा कीबोर्ड या फाइल से मिल सकता है, वहीं Destination stream(डेस्टिनेशन स्ट्रीम) को data computer screen(डेटा कम्प्यूटर स्क्रीन) या किसी फाइल में भेजना होता है। 

    उदाहरण के लिए अब तक जो प्रोग्राम हमने बनाए है, उनमें source stream(सोर्स स्ट्रीम), कीबोर्ड के लिए तथा आउटपुट stream(स्ट्रीम) मॉनीटर के लिए कार्य करती है।

    C++ में File handling(फाइल हैण्डलिंग) के लिए प्रयोग में आने वाली मुख्य file streams(फाइल स्ट्रीम्स) निम्नानुसार है। इन stream(स्ट्रीम) को प्रयोग में लेने के लिए हमें प्रोग्राम में fstream.h नामक फाइल को include करना होता है।

    Ifstream

    इसे फाइल से डेटा read करने के लिए प्रयोग किया जाता है। इसमें निम्नांकित functions होते हैं:

    open("filename") फाइल ओपन करने के लिए।
    get() एक कैरेक्टर read करने के लिए।
    getline (char arr[], int n) एरे arr में n कैरेक्टर कॉपी कराने के लिए।
    read ((char *) variable, sizeof (variable)) बाइनरी डेटा read करने के लिए।
    seekg (offset, position) get पॉइंटर मूव कराने के लिए।
    tellg() get पॉइंटर की पोज़िशन जानने के लिए।
    eof() End of File जानने के लिए ।

    ofstream 

    इसे फाइल में डेटा write करने के लिए प्रयोग में लिया जाता है। इसमें निम्नांकित functions होते हैं:

    open(fileptr) फाइल ओपन करने के लिए।
    put() एक कैरेक्टर write करने के लिए।
    write ((char *) &variable, sizeof(variable)) बाइनरी डेटा write करने के लिए।
    seekp(offset, position) put पॉइंटर मूव कराने के लिए।
    tellp() put पॉइंटर की पोजिशन जानने के लिए।
    eof() End of File जानने के लिए ।

    fstream 

    फाइल पर read तथा write दोनों ऑपरेशन करने के लिए इस स्ट्रीम का प्रयोग किया जाता है। इसमें iffstream तथा ofstream में मौजूद सभी फंक्शन्स होते हैं। 

    file opening (फाइल ओपन करना)

    File को Open करने के लिए दो तरीके हैं। पहला कंस्ट्रक्टर के माध्यम से तथा दूसरा open() फंक्शन के माध्यम से।

    Opening a file through the constructor
    (कंस्ट्रक्टर के माध्यम से फाइल ओपन करना)

    Constructor(कंस्ट्रक्टर) के माध्यम से फाइल ओपन करने के लिए फाइल को Input stream(ifstream), Output stream (ofstream) या fstream क्लास का Object बनाना होता है।

    File से डेटा Read करने के लिए ifstream का ऑब्जेक्ट बनाते समय फाइल को निम्न प्रारूप के अनुसार Open किया जा सकता है:

    ifstream fileobj("filename");

    इसी प्रकार File में Data Write करने के लिए ofstream का ऑब्जेक्ट बनाते समय फाइल को निम्नानुसार Open किया जा सकता है:

    ofstream fileobj("filename");

    Opening a file via open()
    (open () के माध्यम से फाइल को ओपन करना)

    ifstream या ofstream का ऑब्जेक्ट declare करने के बाद open () के माध्यम से फाइल को निम्नानुसार Open किया जा सकता है:

    ifstream fileobj;
    fileobj.open("filename");

        या

    ofstream fileobj;
    fileobj.open("filename");

    Perform read / write operations on a file
    (फाइल पर read / write ऑपरेशन करना)

    File में डेटा Write करने के लिए File को ofstream के माध्यम से open किया जा सकता है। एक बार फाइल को Open कर लेने के बाद उसमें डेटा Write करने के लिए प्रारूप निम्नानुसार है:

    fileobj << variable;

        या

    fileobj << expression;

        या

    fileobj << constant;

    इसी प्रकार File से डेटा Read करने के लिए उसे ifstream के माध्यम से Open करना होता है। File Open कर लेने के बाद उससे डेटा Read करने के लिए प्रारूप निम्नानुसार है:

    fileobj >> variable;

    ध्यान दें कि फाइल पर read तथा write ऑपरेशन दोनों एक साथ करने के लिए fstream क्लास का भी प्रयोग किया जा सकता है। fstream का प्रयोग इसी अध्याय में आगे समझाया गया है।

    close the file(फाइल को close करना)

    फाइल पर read / write ऑपरेशन कर लेने के पश्चात् अंत में उसे close करने के लिए निम्न प्रारूप प्रयोग किया जाता है:

    fileobj.close () ;

    Example:-

    उदाहरणः निम्न उदाहरण में एक फाइल test.txt में Data Structure करवाया जा रहा है:


        #include <iostream>
        #include <fstream>
        #include <conio.h>
        using namespace std;
        int main()
        {
            char name[20], city[20];
            ofstream testfile("text.txt");
            cout << "Enter your Name : ";
            cin >> name;
            cout << "Enter your City : ";
            cin >> city;

            testfile << name << " " << city;
            cout << "Data successfully written to file";
            testfile.close();
            getch();
            return 0;
        }

    Output:-

    Enter your Name : Mukesh
    Enter your City : Sanchore
    Data successfully written to file

    Explain Example:-

    जब उपरोक्त Program को रन करवाया जाएगा तो वह test.txt नाम की File उस Folder में बना देगा, जहां से C++ को रन करवाया जा रहा है। यदि इस File को C Drive के रूट पर बनाना चाहें तो ("test.txt") की जगह ("c:\\test.txt") लिखना होगा।
    प्रोग्राम में आगे यूज़र से name तथा city इनपुट में लेते हुए testfile ऑब्जेक्ट के माध्यम से (testfile << name << " " << city) यह Data फाइल में स्टोर करवा दिया गया है। अंत में testfile.close() के माध्यम से फाइल को बंद कर दिया गया है।

    Note:- turbo C++ में Compiler में fstream.h हेडर फाइल use की जाती हैं लेकिन अभी के मॉडर्न कम्पाइलर में fstream Namespace use की जाती हैं  

    Example:-

    निम्न उदाहरण में पहले से बनी text.bxt नाम की File से डेटा को read किया जा रहा है:


        #include <iostream>
        #include <fstream>
        #include <conio.h>
        using namespace std;
        int main(){
            char  name[20], city[10];
            ifstream testfile("text.txt");

            testfile>>name;
            testfile>>city;

            cout<<"\nName is : "<<name;
            cout<<"\nCity is : "<<city;

            testfile.close();
           
            getch();
            return(0);
        }

    Output:-

    Name is : Mukesh
    City is : Sanchore

     Explain Example:-

    उपरोक्त उदाहरण में यह माना जा रहा है कि पिछले Program द्वारा बनाई गई text.txt नाम की फाइल Disk पर करंट फोल्डर में पहले मौजूद है, जिसमें Mukesh एवं Sanchore लिखा हुआ है। चूंकि इस फाइल से डेटा read किया जाना है, अतः File को ifstream Namespace  की क्लास ifstream के ऑब्जेक्ट के माध्यम से खोला गया है। आगे extraction ऑपरेटर (>>) का प्रयोग करते हुए name तथा city वेरिएबल में File से डेटा read कर लिया गया है, जिन्हें बाद में cout के माध्यम से स्क्रीन पर प्रदर्शित कर दिया गया है।

    Example:-

    उदाहरणः निम्न उदाहरण में एक से अधिक Student के नाम एवं उनके प्राप्तांकों को एक फाइल में स्टोर करते हुए वापस प्रिंट करवाया गया है।


        #include <iostream>
        #include <fstream>
        #include <conio.h>
        #include <ctype.h>
        using namespace std;
        int main(){
            char name[20];
            int marks;
            ofstream output;
            output.open("Marks.text");

            cout<<"\nEnter data for 3 students:-";
            for (int i = 1; i < 4; i++)
            {
                cout<<"\nName of Student : ";
                cin>>name;
                cout<<"Marks of Student : ";
                cin>>marks;
                output <<name <<" "<<marks <<endl;
            }
            output.close();

            ifstream input;
            input.open("Marks.txt");
            cout<<"\nData in \'MARKS.TXT\' file is : ";
            for (int j = 1; j < 4; j++)
            {
                input>>name;
                input>>marks;
                cout<<"\nName : "<<name;
                cout<<"\nMarks : "<<marks;
            }
            input.close();
           
            getch();
            return 0;
        }

    Output:-

    Enter data for 3 students:-
    Name of Student : Mukesh
    Marks of Student : 98

    Name of Student : Denny
    Marks of Student : 95

    Name of Student : Milap
    Marks of Student : 94

    Data in 'MARKS.TXT' file is : 
    Name : Mukesh
    Marks : 98
    Name : Denny
    Marks : 95
    Name : Milap
    Marks : 94

    Explain Example:- 

    उपरोक्त उदाहरण में 3 Student से उनके Name तथा Marks पूछे गए हैं। प्रत्येक लूप में output << name << " << marks << " \n" ; के माध्यम से name तथा marks की वैल्यू को output नाम के फाइल ऑब्जेक्ट में स्टोर करवाया जा रहा है। 

    Post a Comment

    0 Comments