C++ Academy · पाठ

बाइनरी फ़ाइल I/O

कच्चे बाइट पढ़ें और लिखें

पाठ 3, कुल 4 में से13 चरण

बाइनरी फ़ाइल I/O, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

पाठ बनाम बाइनरी

टेक्स्ट मोड मनुष्यों द्वारा पढ़े जा सकने वाले अक्षर लिखता है; बाइनरी मोड ऑब्जेक्ट के कच्चे बाइट ठीक उसी तरह लिखता है जैसे वे मेमोरी में होते हैं। इसे std::ios::binary के साथ खोलें।

#include <iostream>
#include <fstream>

int main() {
    int value = 12345;
    std::ofstream out("v.bin", std::ios::binary);
    out.write(reinterpret_cast<const char*>(&value), sizeof(value));
    std::cout << "wrote " << sizeof(value) << " bytes\n";
    return 0;
}

write बाइट लेता है

write(ptr, n), ptr से n कच्चे बाइट आउटपुट करता है। ऑब्जेक्ट के पते को const char* में कास्ट करें।

#include <iostream>
#include <fstream>

int main() {
    double d = 3.14;
    std::ofstream out("d.bin", std::ios::binary);
    out.write(reinterpret_cast<const char*>(&d), sizeof(d));
    out.close();
    std::cout << "saved a double\n";
    return 0;
}

read बाइट पुनर्स्थापित करता है

read(ptr, n), ptr पर मौजूद ऑब्जेक्ट में n बाइट लोड करता है और बाइनरी लेखन की प्रक्रिया को उलट देता है।

#include <iostream>
#include <fstream>

int main() {
    int original = 777;
    std::ofstream("i.bin", std::ios::binary).write(reinterpret_cast<const char*>(&original), sizeof(original));
    int loaded = 0;
    std::ifstream in("i.bin", std::ios::binary);
    in.read(reinterpret_cast<char*>(&loaded), sizeof(loaded));
    std::cout << loaded << '\n';
    return 0;
}

POD स्ट्रक्चर लिखना

साधारण डेटा वाले स्ट्रक्चर (जिनमें पॉइंटर न हों और सदस्य निश्चित आकार के हों) को बाइट के एक ब्लॉक के रूप में डंप करके फिर से लोड किया जा सकता है।

#include <iostream>
#include <fstream>

struct Record { int id; double balance; };

int main() {
    Record r{1, 99.5};
    std::ofstream out("rec.bin", std::ios::binary);
    out.write(reinterpret_cast<const char*>(&r), sizeof(r));
    std::cout << "struct saved\n";
    return 0;
}

स्ट्रक्चर को वापस पढ़ना

एक ही read कॉल में पूरा स्ट्रक्चर पुनर्स्थापित हो जाता है।

#include <iostream>
#include <fstream>

struct Record { int id; double balance; };

int main() {
    Record w{42, 250.0};
    std::ofstream("r2.bin", std::ios::binary).write(reinterpret_cast<const char*>(&w), sizeof(w));
    Record r{};
    std::ifstream in("r2.bin", std::ios::binary);
    in.read(reinterpret_cast<char*>(&r), sizeof(r));
    std::cout << r.id << ' ' << r.balance << '\n';
    return 0;
}

ऐरे लिखना

ऐरे का कुल बाइट आकार पास करके आप पूरे ऐरे को एक ही कॉल में लिख सकते हैं।

#include <iostream>
#include <fstream>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    std::ofstream out("arr.bin", std::ios::binary);
    out.write(reinterpret_cast<const char*>(arr), sizeof(arr));
    std::cout << "wrote " << sizeof(arr) << " bytes\n";
    return 0;
}

ऐरे को वापस पढ़ना

उतने ही बाइट, उसी आकार के ऐरे में पढ़ें।

#include <iostream>
#include <fstream>

int main() {
    int src[5] = {10, 20, 30, 40, 50};
    std::ofstream("a2.bin", std::ios::binary).write(reinterpret_cast<const char*>(src), sizeof(src));
    int dst[5] = {};
    std::ifstream in("a2.bin", std::ios::binary);
    in.read(reinterpret_cast<char*>(dst), sizeof(dst));
    for (int x : dst) std::cout << x << ' ';
    std::cout << '\n';
    return 0;
}

स्थितियों पर जाना

seekg (get) और seekp (put) पढ़ने/लिखने की स्थिति को स्थानांतरित करते हैं, जिससे फ़ाइल में यादृच्छिक पहुँच संभव होती है।

#include <iostream>
#include <fstream>

int main() {
    int data[3] = {100, 200, 300};
    std::ofstream("seek.bin", std::ios::binary).write(reinterpret_cast<const char*>(data), sizeof(data));
    std::ifstream in("seek.bin", std::ios::binary);
    in.seekg(sizeof(int)); // skip to second int
    int second; in.read(reinterpret_cast<char*>(&second), sizeof(second));
    std::cout << second << '\n';
    return 0;
}

स्थिति बताना

tellg और tellp वर्तमान स्थिति बताते हैं, जो फ़ाइल का आकार या ऑफ़सेट मापने में उपयोगी है।

#include <iostream>
#include <fstream>

int main() {
    int data[4] = {1, 2, 3, 4};
    std::ofstream("tell.bin", std::ios::binary).write(reinterpret_cast<const char*>(data), sizeof(data));
    std::ifstream in("tell.bin", std::ios::binary);
    in.seekg(0, std::ios::end);
    std::cout << "file size: " << in.tellg() << " bytes\n";
    return 0;
}

पॉइंटर क्यों नहीं

पॉइंटर या std::string वाले ऑब्जेक्ट को कभी भी बाइनरी रूप में डंप न करें: आप उस पते को सहेजेंगे जिस पर पॉइंटर है, न कि उस पते पर मौजूद डेटा को। इसके बजाय सामग्री को क्रमबद्ध करें।

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::string s = "hello";
    std::ofstream out("str.bin", std::ios::binary);
    std::size_t len = s.size();
    out.write(reinterpret_cast<const char*>(&len), sizeof(len));
    out.write(s.data(), len); // write the chars, not the object
    std::cout << "serialized " << len << " chars\n";
    return 0;
}

पोर्टेबिलिटी संबंधी सावधानियाँ

बाइनरी लेआउट एंडियननेस और प्रकारों के आकार पर निर्भर करते हैं। एक प्लेटफ़ॉर्म पर लिखी गई फ़ाइलें दूसरे प्लेटफ़ॉर्म पर सही ढंग से पढ़ी नहीं जा सकतीं, इसलिए साझा करने के लिए एक निश्चित फ़ॉर्मैट निर्धारित करें।

#include <iostream>
#include <cstdint>

int main() {
    std::int32_t fixed = 1; // fixed-width type for portability
    std::cout << "sizeof int32_t = " << sizeof(fixed) << '\n';
    return 0;
}

त्वरित जाँच

बाइनरी इनपुट/आउटपुट की अपनी समझ जाँचिए।

पुनरावलोकन

आपने बाइनरी फ़ाइल इनपुट/आउटपुट सीखा:

  • std::ios::binary के साथ खोलें; reinterpret_cast<char*> के साथ write/read का उपयोग करें
  • seekg/seekp और tellg/tellp यादृच्छिक पहुँच देते हैं
  • पॉइंटर या स्ट्रिंग को सीधे कभी डंप न करें; उनकी सामग्री को क्रमबद्ध करें और एंडियननेस से सावधान रहें

अब आप स्ट्रीम की स्थिति जाँचना और त्रुटियों का प्रबंधन करना सीखेंगे।

शुरुआत निःशुल्क

एआई शिक्षक के साथ C++ सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “बाइनरी फ़ाइल I/O” पाठ निःशुल्क है?

हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “बाइनरी फ़ाइल I/O” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“बाइनरी फ़ाइल I/O” में मैं क्या सीखूँगा?

कच्चे बाइट पढ़ें और लिखें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“बाइनरी फ़ाइल I/O” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. ifstream से फ़ाइलें पढ़ना
  2. ofstream से फ़ाइलें लिखना
  3. बाइनरी फ़ाइल I/O
  4. त्रुटि-संभालना और स्थिति
← C++ Academy पर वापस जाएँ