বাইনারি ফাইল হ্যান্ডলিং C++ এ এমন একটি প্রক্রিয়া যেখানে ডেটা ফাইলের ভিতরে বাইনারি ফর্ম্যাটে সংরক্ষণ বা পড়া হয়। সাধারণত টেক্সট ফাইলের ক্ষেত্রে ডেটা মানব-পঠনযোগ্য থাকে, তবে বাইনারি ফাইলে ডেটা সংরক্ষণ করা হয় বাইনারি ফর্ম্যাটে, যা সরাসরি মেশিন-রিডেবল। এতে করে ফাইলের আকার কম হয় এবং পড়া/লেখার গতি বাড়ে।
C++ এ বাইনারি ফাইল হ্যান্ডলিং
C++ এ বাইনারি ফাইল হ্যান্ডলিং এর জন্য fstream লাইব্রেরির ifstream এবং ofstream ক্লাস ব্যবহার করা হয়। ios::binary মোডটি ব্যবহার করে ফাইল বাইনারি মোডে খোলা হয় এবং ডেটা লিখতে বা পড়তে write() এবং read() মেথড ব্যবহার করা হয়।
বাইনারি ফাইলে লেখা (Writing to a Binary File)
write() মেথড ব্যবহার করে ডেটা বাইনারি ফাইলে লেখা হয়। এর জন্য ডেটার ঠিকানা ও ডেটার সাইজ ইনপুট হিসেবে দিতে হয়।
উদাহরণ: বাইনারি ফাইলে লেখা
#include <iostream>
#include <fstream>
using namespace std;
struct Person {
char name[20];
int age;
float height;
};
int main() {
Person person1 = {"John Doe", 30, 5.9};
// বাইনারি ফাইল খোলা এবং ডেটা লেখা
ofstream outFile("person.dat", ios::binary);
if (!outFile) {
cout << "Error opening file for writing." << endl;
return 1;
}
// স্ট্রাকচারের ডেটা বাইনারি ফাইলে লেখা
outFile.write(reinterpret_cast<char*>(&person1), sizeof(person1));
outFile.close();
cout << "Data written to binary file successfully." << endl;
return 0;
}
বর্ণনা:
- এখানে
Personনামে একটি স্ট্রাকচার ডিফাইন করা হয়েছে, যাname,age, এবংheightনামে তিনটি ডেটা মেম্বার ধারণ করে। "person.dat"নামে একটি বাইনারি ফাইল খোলা হয়েছে এবংwrite()মেথড ব্যবহার করেperson1অবজেক্টের ডেটা লেখা হয়েছে।reinterpret_cast<char*>ব্যবহার করে ডেটার ঠিকানা ক্যারেক্টার পয়েন্টারে রূপান্তর করা হয়েছে।
বাইনারি ফাইল থেকে পড়া (Reading from a Binary File)
read() মেথড ব্যবহার করে ডেটা বাইনারি ফাইল থেকে পড়া হয়। read() মেথডেও ডেটার ঠিকানা এবং ডেটার সাইজ ইনপুট হিসেবে দিতে হয়।
উদাহরণ: বাইনারি ফাইল থেকে পড়া
#include <iostream>
#include <fstream>
using namespace std;
struct Person {
char name[20];
int age;
float height;
};
int main() {
Person person1;
// বাইনারি ফাইল খোলা এবং ডেটা পড়া
ifstream inFile("person.dat", ios::binary);
if (!inFile) {
cout << "Error opening file for reading." << endl;
return 1;
}
// স্ট্রাকচারের ডেটা পড়া
inFile.read(reinterpret_cast<char*>(&person1), sizeof(person1));
inFile.close();
// পড়া ডেটা প্রদর্শন করা
cout << "Name: " << person1.name << endl;
cout << "Age: " << person1.age << endl;
cout << "Height: " << person1.height << endl;
return 0;
}
বর্ণনা:
"person.dat"ফাইলটি বাইনারি মোডে খোলা হয়েছে এবংread()মেথড ব্যবহার করেperson1অবজেক্টে ডেটা পড়া হয়েছে।- পড়া ডেটা
person1অবজেক্টে সংরক্ষিত হয়েছে এবং পরেcoutদিয়ে প্রদর্শন করা হয়েছে।
একাধিক রেকর্ড লেখা ও পড়া
বাইনারি ফাইলে একাধিক রেকর্ড সংরক্ষণ এবং পড়ার জন্য একটি লুপ ব্যবহার করা হয়। প্রতিটি রেকর্ডের জন্য write() এবং read() মেথড কল করা হয়।
উদাহরণ: একাধিক রেকর্ড লেখা
#include <iostream>
#include <fstream>
using namespace std;
struct Person {
char name[20];
int age;
float height;
};
int main() {
Person persons[2] = { {"Alice", 28, 5.5}, {"Bob", 32, 5.8} };
// বাইনারি ফাইল খোলা এবং একাধিক রেকর্ড লেখা
ofstream outFile("persons.dat", ios::binary);
if (!outFile) {
cout << "Error opening file for writing." << endl;
return 1;
}
for (int i = 0; i < 2; i++) {
outFile.write(reinterpret_cast<char*>(&persons[i]), sizeof(persons[i]));
}
outFile.close();
cout << "Multiple records written to binary file successfully." << endl;
return 0;
}
উদাহরণ: একাধিক রেকর্ড পড়া
#include <iostream>
#include <fstream>
using namespace std;
struct Person {
char name[20];
int age;
float height;
};
int main() {
Person persons[2];
// বাইনারি ফাইল খোলা এবং একাধিক রেকর্ড পড়া
ifstream inFile("persons.dat", ios::binary);
if (!inFile) {
cout << "Error opening file for reading." << endl;
return 1;
}
for (int i = 0; i < 2; i++) {
inFile.read(reinterpret_cast<char*>(&persons[i]), sizeof(persons[i]));
}
inFile.close();
// পড়া ডেটা প্রদর্শন করা
for (int i = 0; i < 2; i++) {
cout << "Name: " << persons[i].name << ", Age: " << persons[i].age << ", Height: " << persons[i].height << endl;
}
return 0;
}
বাইনারি ফাইল হ্যান্ডলিং এ ব্যবহৃত গুরুত্বপূর্ণ মেথড
write(): ফাইলে বাইনারি ডেটা লেখা হয়।
outFile.write(reinterpret_cast<char*>(&data), sizeof(data));
read(): বাইনারি ফাইল থেকে ডেটা পড়া হয়।
inFile.read(reinterpret_cast<char*>(&data), sizeof(data));
বাইনারি ফাইলের সুবিধা
- দ্রুত ডেটা এক্সেস: বাইনারি ফাইল হ্যান্ডলিংয়ের গতি বেশি, কারণ এতে ডেটা সরাসরি মেমোরি ফরম্যাটে সংরক্ষিত থাকে।
- ফাইল সাইজ কম: বাইনারি ফাইলের সাইজ ছোট হয়, কারণ এতে অতিরিক্ত ফরম্যাটিং সংরক্ষণ করা হয় না।
- ডেটা নিরাপত্তা: ডেটা মানুষের পঠনযোগ্য না থাকায় এটি আরও নিরাপদ থাকে।
সারসংক্ষেপ
- বাইনারি ফাইলে লেখা:
write()মেথড ব্যবহার করে ডেটা ফাইলে লেখা হয়। - বাইনারি ফাইল থেকে পড়া:
read()মেথড ব্যবহার করে ডেটা ফাইল থেকে পড়া হয়। - ডেটা সংরক্ষণ এবং পড়ার জন্য ডেটার ঠিকানা ও সাইজ প্রদান করতে হয়।
বাইনারি ফাইল হ্যান্ডলিং ব্যবহারে ডেটা দ্রুত এবং নিরাপদে সংরক্ষণ এবং পরিচালনা করা যায়।