কম্পিউটার টিউটোরিয়াল

সি/সি++-তে বাইনারি ফাইল পড়া ও লেখা


লেখা (Writing)

সি++-এ বাইনারি ফাইলে লেখার জন্য write মেথড ব্যবহার করা হয়। এটি একটি নির্দিষ্ট সংখ্যক বাইট প্রদত্ত স্ট্রিমে "put" পয়েন্টারের পজিশন থেকে লিখে। যদি put পয়েন্টার ফাইলের শেষে থাকে, তবে ফাইলটি এক্সটেন্ড হয়। যদি পয়েন্টার ফাইলের মাঝপথে নির্দেশ করে, তবে ফাইলের ক্যারেক্টারগুলো নতুন ডেটা দিয়ে ওভাররাইট হয়।

লেখার সময় কোনো এরর হলে স্ট্রিমটি এরর স্টেটে চলে যায়।

write মেথডের সিনট্যাক্স

ostream& write(const char*, int);

পড়া (Reading)

সি++-এ বাইনারি ফাইল পড়ার জন্য read মেথড ব্যবহার করা হয়। এটি প্রদত্ত স্ট্রিম থেকে একটি নির্দিষ্ট সংখ্যক বাইট এক্সট্র্যাক্ট করে এবং প্রথম প্যারামিটার দ্বারা নির্দেশিত মেমরিতে রাখে। পড়ার সময় কোনো এরর হলে স্ট্রিমটি এরর স্টেটে চলে যায়, এবং ভবিষ্যতে সব রিড অপারেশন ব্যর্থ হবে।

gcount() ব্যবহার করে ইতিমধ্যে কত ক্যারেক্টার পড়া হয়েছে গণনা করা যায়। তারপর clear() ব্যবহার করে স্ট্রিমকে ব্যবহারযোগ্য স্টেটে ফিরিয়ে আনা যায়।

read মেথডের সিনট্যাক্স

istream& read(const char*, int);

এলগরিদম

Begin
    Student স্ট্রাকচার তৈরি করুন ভেরিয়েবল ঘোষণা করতে
    বাইনারি ফাইল খুলুন লেখার জন্য
    ফাইল খোলার সময় কোনো এরর হয়েছে কিনা চেক করুন
    ভেরিয়েবলগুলো ডেটা দিয়ে ইনিশিয়ালাইজ করুন
    যদি ফাইল সফলভাবে খুলে যায়, write মেথড ব্যবহার করে বাইনারি ডেটা লিখুন
    ফাইল বন্ধ করুন লেখার জন্য
    বাইনারি ফাইল খুলুন পড়ার জন্য
    ফাইল খোলার সময় কোনো এরর হয়েছে কিনা চেক করুন
    যদি ফাইল সফলভাবে খুলে যায়, read মেথড ব্যবহার করে বাইনারি ডেটা পড়ুন
    ফাইল বন্ধ করুন পড়ার জন্য
    কোনো এরর হয়েছে কিনা চেক করুন
    ডেটা প্রিন্ট করুন
End.

উদাহরণ কোড

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

struct Student {
    int roll_no;
    string name;
};

int main() {
    ofstream wf("student.dat", ios::out | ios::binary);
    if(!wf) {
        cout << "Cannot open file!" << endl;
        return 1;
    }
    Student wstu[3];
    wstu[0].roll_no = 1; wstu[0].name = "Ram";
    wstu[1].roll_no = 2; wstu[1].name = "Shyam";
    wstu[2].roll_no = 3; wstu[2].name = "Madhu";
    for(int i = 0; i < 3; i++)
        wf.write((char *) &wstu[i], sizeof(Student));
    wf.close();
    if(!wf.good()) {
        cout << "Error occurred at writing time!" << endl;
        return 1;
    }
    ifstream rf("student.dat", ios::in | ios::binary);
    if(!rf) {
        cout << "Cannot open file!" << endl;
        return 1;
    }
    Student rstu[3];
    for(int i = 0; i < 3; i++)
        rf.read((char *) &rstu[i], sizeof(Student));
    rf.close();
    if(!rf.good()) {
        cout << "Error occurred at reading time!" << endl;
        return 1;
    }
    cout << "Student's Details:" << endl;
    for(int i=0; i < 3; i++) {
        cout << "Roll No: " << wstu[i].roll_no << endl;
        cout << "Name: " << wstu[i].name << endl;
        cout << endl;
    }
    return 0;
}

আউটপুট

Student's Details:
Roll No: 1
Name: Ram
Roll No: 2
Name: Shyam
Roll No: 3
Name: Madhu
  1. C/C++-তে rand() এবং srand() ফাংশন

  2. C/C++-তে OS-ইনডিপেনডেন্ট কোড লিখা

  3. C/C++-তে lseek() ব্যবহার করে 얼터নেট nth বাইট পড়া এবং অন্য ফাইলে লেখা

  4. Go-তে Redis প্রোটোকল মাস্টার করুন: READ ও WRITE ইমপ্লিমেন্টেশন