अध्याय 12: C++ में फाइल हैंडलिंग (File Handling in C++)

अध्याय 12: C++ में फाइल हैंडलिंग (File Handling in C++)

C++ प्रोग्रामिंग में फाइल हैंडलिंग एक महत्वपूर्ण विषय है, जो आपको डेटा को स्थायी रूप से संग्रहीत करने और पुनः प्राप्त करने की सुविधा देता है। फाइल हैंडलिंग के माध्यम से, आप टेक्स्ट और बाइनरी फाइल्स में डेटा को पढ़ सकते हैं, लिख सकते हैं, और संशोधित कर सकते हैं। यह सुविधा आपको प्रोग्राम के डेटा को स्थायी रूप से संग्रहीत करने और उसे बाद में उपयोग के लिए पुनः प्राप्त करने की अनुमति देती है। इस अध्याय में, हम फाइल हैंडलिंग की बुनियादी अवधारणाओं को समझेंगे, जैसे कि फाइल खोलना, बंद करना, पढ़ना, लिखना, और विभिन्न मोड्स का उपयोग करना। साथ ही, हम यह भी देखेंगे कि C++ में टेक्स्ट और बाइनरी फाइल्स के साथ कैसे काम किया जाता है। इस अध्याय के अंत तक, आप फाइल हैंडलिंग की तकनीकों का उपयोग करके अपने प्रोग्राम्स को और भी शक्तिशाली और व्यावहारिक बनाने में सक्षम होंगे।

फाइलें कैसे पढ़ें और लिखें? (How to Read and Write Files?)

C++ में फाइल हैंडलिंग के माध्यम से आप फाइलों में डेटा को पढ़ने और लिखने की क्षमता प्राप्त कर सकते हैं। यह सुविधा आपको डेटा को स्थायी रूप से संग्रहीत करने और पुनः प्राप्त करने की अनुमति देती है, जिससे आपका प्रोग्राम अधिक व्यावहारिक और उपयोगी बनता है। C++ में फाइल हैंडलिंग के लिए <fstream> हेडर फाइल का उपयोग किया जाता है, जिसमें ofstream, ifstream, और fstream जैसे क्लासेस शामिल होते हैं।

1. फाइल खोलना (Opening a File)

फाइल को पढ़ने या लिखने के लिए सबसे पहले आपको उसे खोलना पड़ता है। इसके लिए आप ifstream (input file stream) का उपयोग फाइल को पढ़ने के लिए, और ofstream (output file stream) का उपयोग फाइल में लिखने के लिए कर सकते हैं।

उदाहरण: फाइल खोलना

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    // फाइल में लिखने के लिए
    ofstream outFile;
    outFile.open("example.txt");

    if (!outFile) {
        cout << "File couldn't be opened!" << endl;
        return 1;
    }

    // फाइल से पढ़ने के लिए
    ifstream inFile;
    inFile.open("example.txt");

    if (!inFile) {
        cout << "File couldn't be opened!" << endl;
        return 1;
    }

    return 0;
}

2. फाइल में लिखना (Writing to a File)

फाइल में डेटा लिखने के लिए, आप ofstream का उपयोग कर सकते हैं। इसके लिए आपको << ऑपरेटर का उपयोग करना होगा, जो डेटा को फाइल में लिखता है।

उदाहरण: फाइल में लिखना

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    ofstream outFile("example.txt");

    if (outFile.is_open()) {
        outFile << "Hello, World!" << endl;
        outFile << "This is a text file." << endl;
        outFile.close();  // फाइल को बंद करना
        cout << "Data written to the file successfully!" << endl;
    } else {
        cout << "Unable to open the file." << endl;
    }

    return 0;
}

इस उदाहरण में, example.txt नाम की फाइल में “Hello, World!” और “This is a text file.” लिखा जाएगा।

3. फाइल से पढ़ना (Reading from a File)

फाइल से डेटा पढ़ने के लिए, आप ifstream का उपयोग कर सकते हैं। इसके लिए आप >> ऑपरेटर का उपयोग कर सकते हैं या फिर getline() का उपयोग कर सकते हैं, जो पूरी लाइन को पढ़ता है।

उदाहरण: फाइल से पढ़ना

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    ifstream inFile("example.txt");

    if (inFile.is_open()) {
        string line;

        while (getline(inFile, line)) {
            cout << line << endl;  // फाइल की हर लाइन को प्रदर्शित करना
        }

        inFile.close();  // फाइल को बंद करना
    } else {
        cout << "Unable to open the file." << endl;
    }

    return 0;
}

इस उदाहरण में, example.txt फाइल की सभी लाइनों को पढ़कर कंसोल पर प्रदर्शित किया जाएगा।

4. फाइल को बंद करना (Closing a File)

फाइल में डेटा लिखने या पढ़ने के बाद, हमेशा उसे बंद करना आवश्यक है। इससे फाइल का डेटा सुरक्षित रहता है और कोई अन्य त्रुटि नहीं होती।

उदाहरण: फाइल को बंद करना

outFile.close();  // फाइल में लिखने के बाद बंद करना
inFile.close();   // फाइल से पढ़ने के बाद बंद करना

5. फाइल ओपन मोड्स (File Open Modes)

फाइल को खोलते समय आप विभिन्न मोड्स का उपयोग कर सकते हैं, जैसे:

  • ios::in: फाइल को पढ़ने के लिए खोलता है।
  • ios::out: फाइल को लिखने के लिए खोलता है।
  • ios::app: फाइल के अंत में लिखने के लिए खोलता है (फाइल के मौजूदा डेटा को हटाए बिना)।
  • ios::trunc: फाइल को ट्रंक करता है (मौजूदा डेटा को हटाकर नए डेटा के लिए स्थान बनाता है)।
  • ios::binary: फाइल को बाइनरी मोड में खोलता है।

उदाहरण: फाइल को विशेष मोड्स में खोलना

ofstream outFile;
outFile.open("example.txt", ios::out | ios::app);  // फाइल को append मोड में खोलना

फाइल स्ट्रीम्स का उपयोग (Using File Streams)

C++ में फाइल हैंडलिंग के लिए फाइल स्ट्रीम्स का उपयोग किया जाता है, जो इनपुट और आउटपुट के लिए डेटा को फाइलों से पढ़ने और फाइलों में लिखने की प्रक्रिया को सरल बनाते हैं। फाइल स्ट्रीम्स को उपयोग करके, आप टेक्स्ट और बाइनरी फाइलों में डेटा को पढ़ सकते हैं, लिख सकते हैं, और संशोधित कर सकते हैं। C++ में फाइल स्ट्रीम्स को <fstream> हेडर फाइल के माध्यम से उपलब्ध कराया जाता है, जिसमें तीन मुख्य क्लासेस शामिल होते हैं: ifstream, ofstream, और fstream

1. ifstream – इनपुट फाइल स्ट्रीम (Input File Stream)

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

उदाहरण: ifstream का उपयोग

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    ifstream inFile("example.txt");

    if (inFile.is_open()) {
        string line;

        while (getline(inFile, line)) {
            cout << line << endl;  // फाइल की हर लाइन को प्रदर्शित करना
        }

        inFile.close();  // फाइल को बंद करना
    } else {
        cout << "Unable to open the file." << endl;
    }

    return 0;
}

इस उदाहरण में, ifstream का उपयोग “example.txt” नामक फाइल से डेटा को पढ़ने के लिए किया जा रहा है।

2. ofstream – आउटपुट फाइल स्ट्रीम (Output File Stream)

ofstream क्लास का उपयोग फाइल में डेटा लिखने के लिए किया जाता है। इसका उपयोग टेक्स्ट या बाइनरी फाइलों में डेटा को आउटपुट के रूप में भेजने के लिए किया जाता है।

उदाहरण: ofstream का उपयोग

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    ofstream outFile("example.txt");

    if (outFile.is_open()) {
        outFile << "Hello, World!" << endl;
        outFile << "This is a text file." << endl;
        outFile.close();  // फाइल को बंद करना
        cout << "Data written to the file successfully!" << endl;
    } else {
        cout << "Unable to open the file." << endl;
    }

    return 0;
}

इस उदाहरण में, ofstream का उपयोग “example.txt” नामक फाइल में डेटा को लिखने के लिए किया जा रहा है।

3. fstream – फाइल स्ट्रीम (File Stream)

fstream क्लास एक सामान्य फाइल स्ट्रीम है, जिसका उपयोग फाइल को पढ़ने और लिखने दोनों के लिए किया जा सकता है। यह ifstream और ofstream दोनों की कार्यक्षमता को एक ही क्लास में सम्मिलित करता है।

उदाहरण: fstream का उपयोग

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    fstream file;

    // फाइल खोलना (पढ़ने और लिखने के लिए)
    file.open("example.txt", ios::in | ios::out | ios::app);

    if (file.is_open()) {
        // फाइल में लिखना
        file << "Appending this line to the file." << endl;

        // फाइल में से डेटा पढ़ना
        file.seekg(0);  // फाइल की शुरुआत में लौटना
        string line;

        while (getline(file, line)) {
            cout << line << endl;  // फाइल की हर लाइन को प्रदर्शित करना
        }

        file.close();  // फाइल को बंद करना
    } else {
        cout << "Unable to open the file." << endl;
    }

    return 0;
}

इस उदाहरण में, fstream का उपयोग “example.txt” नामक फाइल को पढ़ने और लिखने दोनों के लिए किया जा रहा है।

4. फाइल मोड्स का उपयोग (Using File Modes)

फाइल स्ट्रीम्स के साथ, आप विभिन्न फाइल मोड्स का उपयोग कर सकते हैं, जैसे:

  • ios::in: इनपुट (पढ़ने) के लिए फाइल को खोलता है।
  • ios::out: आउटपुट (लिखने) के लिए फाइल को खोलता है।
  • ios::app: फाइल के अंत में डेटा जोड़ने के लिए खोलता है।
  • ios::trunc: फाइल के मौजूदा डेटा को हटाकर उसे फिर से लिखने के लिए खोलता है।
  • ios::binary: फाइल को बाइनरी मोड में खोलता है।

उदाहरण: फाइल मोड्स का उपयोग

fstream file;
file.open("example.txt", ios::in | ios::out | ios::app);

5. फाइल हैंडलिंग में त्रुटि प्रबंधन (Error Handling in File Handling)

फाइल स्ट्रीम्स का उपयोग करते समय, आपको यह सुनिश्चित करना होता है कि फाइल सही ढंग से खोली गई है और कोई त्रुटि नहीं है। इसके लिए आप is_open(), fail(), eof(), और bad() जैसे फंक्शन्स का उपयोग कर सकते हैं।

उदाहरण: त्रुटि प्रबंधन

ifstream inFile("example.txt");

if (!inFile.is_open()) {
    cout << "Error: Could not open the file." << endl;
}

if (inFile.fail()) {
    cout << "Error: File operation failed." << endl;
}

inFile.close();

टेक्स्ट और बाइनरी फाइल्स (Text and Binary Files)

C++ में, फाइलें दो मुख्य प्रकार की होती हैं: टेक्स्ट फाइल्स और बाइनरी फाइल्स। दोनों प्रकार की फाइलें डेटा को स्थायी रूप से संग्रहीत करने के लिए उपयोग की जाती हैं, लेकिन इनकी संरचना और डेटा को संग्रहीत करने के तरीके में अंतर होता है। समझते हैं कि टेक्स्ट और बाइनरी फाइल्स क्या हैं और इनका उपयोग कैसे किया जाता है।

1. टेक्स्ट फाइल्स (Text Files)

टेक्स्ट फाइल्स में डेटा ASCII या यूनिकोड फॉर्मेट में स्टोर किया जाता है। इन्हें एक सामान्य टेक्स्ट एडिटर जैसे नोटपैड या वर्डपैड के माध्यम से आसानी से पढ़ा और संपादित किया जा सकता है। टेक्स्ट फाइल्स में डेटा लाइनों के रूप में संग्रहीत होता है, और प्रत्येक लाइन के अंत में एक नई पंक्ति का संकेतक (newline character) होता है।

टेक्स्ट फाइल्स का उपयोग

टेक्स्ट फाइल्स का उपयोग तब किया जाता है जब आप डेटा को मानव-पठनीय (human-readable) रूप में संग्रहीत करना चाहते हैं, जैसे कि कॉन्फ़िगरेशन फाइल्स, लॉग फाइल्स, और सरल डेटा स्टोर।

उदाहरण: टेक्स्ट फाइल में लिखना और पढ़ना

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    // टेक्स्ट फाइल में लिखना
    ofstream outFile("textfile.txt");
    if (outFile.is_open()) {
        outFile << "Hello, World!" << endl;
        outFile << "This is a text file." << endl;
        outFile.close();
    } else {
        cout << "Unable to open file for writing." << endl;
    }

    // टेक्स्ट फाइल से पढ़ना
    ifstream inFile("textfile.txt");
    if (inFile.is_open()) {
        string line;
        while (getline(inFile, line)) {
            cout << line << endl;
        }
        inFile.close();
    } else {
        cout << "Unable to open file for reading." << endl;
    }

    return 0;
}

इस उदाहरण में, textfile.txt में डेटा लिखा गया है और बाद में उसी डेटा को पढ़ा गया है। टेक्स्ट फाइल्स में डेटा को आसानी से देखा और संपादित किया जा सकता है।

2. बाइनरी फाइल्स (Binary Files)

बाइनरी फाइल्स में डेटा बाइनरी फॉर्मेट में स्टोर किया जाता है, जिसका मतलब है कि डेटा को बाइट्स के रूप में संग्रहीत किया जाता है। बाइनरी फाइल्स में डेटा सीधे बाइट्स के रूप में संग्रहीत होता है, इसलिए इसे टेक्स्ट एडिटर के माध्यम से पढ़ना कठिन होता है और मानव-पठनीय नहीं होता।

बाइनरी फाइल्स में डेटा को स्टोर करने का तरीका अधिक कुशल होता है क्योंकि यह डेटा को बाइट्स में संग्रहीत करता है और किसी भी अतिरिक्त फ़ॉर्मेटिंग या कैरेक्टर को जोड़ने की आवश्यकता नहीं होती है।

बाइनरी फाइल्स का उपयोग

बाइनरी फाइल्स का उपयोग तब किया जाता है जब आपको डेटा को अधिक कॉम्पैक्ट और कुशल तरीके से संग्रहीत करने की आवश्यकता होती है, जैसे कि इमेज, वीडियो, ऑडियो फाइल्स, और डेटा संरचनाओं को स्टोर करने के लिए।

उदाहरण: बाइनरी फाइल में लिखना और पढ़ना

#include <iostream>
#include <fstream>
using namespace std;

struct Data {
    int id;
    char name[20];
};

int main() {
    Data data = {1, "John Doe"};

    // बाइनरी फाइल में लिखना
    ofstream outFile("binaryfile.dat", ios::binary);
    if (outFile.is_open()) {
        outFile.write(reinterpret_cast<char*>(&data), sizeof(data));
        outFile.close();
    } else {
        cout << "Unable to open file for writing." << endl;
    }

    // बाइनरी फाइल से पढ़ना
    Data readData;
    ifstream inFile("binaryfile.dat", ios::binary);
    if (inFile.is_open()) {
        inFile.read(reinterpret_cast<char*>(&readData), sizeof(readData));
        inFile.close();

        cout << "ID: " << readData.id << endl;
        cout << "Name: " << readData.name << endl;
    } else {
        cout << "Unable to open file for reading." << endl;
    }

    return 0;
}

इस उदाहरण में, binaryfile.dat नामक बाइनरी फाइल में एक स्ट्रक्चर Data का डेटा लिखा गया है और फिर उसे पढ़ा गया है। बाइनरी फाइल्स में डेटा को कुशलता से संग्रहीत किया जाता है और इसे पढ़ने के लिए विशेष कोड की आवश्यकता होती है।

3. टेक्स्ट और बाइनरी फाइल्स के बीच अंतर (Difference Between Text and Binary Files)

पैरामीटरटेक्स्ट फाइल्सबाइनरी फाइल्स
डेटा फॉर्मेटASCII या यूनिकोड फॉर्मेटबाइनरी फॉर्मेट
पढ़ने की क्षमतामानव-पठनीय, टेक्स्ट एडिटर के माध्यम से पढ़ा जा सकता हैमानव-पठनीय नहीं, विशेष प्रोग्राम या कोड की आवश्यकता होती है
स्टोरेजअधिक स्टोरेज स्पेस की आवश्यकता हो सकती हैकम स्टोरेज स्पेस की आवश्यकता होती है
उपयोगटेक्स्ट डेटा, कॉन्फ़िगरेशन फाइल्स, लॉग फाइल्सइमेज, वीडियो, ऑडियो, डेटा संरचनाओं का कुशल संग्रहण
प्रदर्शनस्लो डेटा प्रोसेसिंगफास्ट डेटा प्रोसेसिंग


Table of Contents

Index