C++ بائنری فائلوں کے ساتھ تعامل کرنے کے لیے
C++ کا استعمال کرتے ہوئے ایک بائنری فائل لکھیں۔
C++ کا استعمال کرتے ہوئے ڈیٹا کو بائنری فائل میں محفوظ کرنے کے لیے، write() طریقہ استعمال کیا جاتا ہے۔ یہ فنکشن 'put' پوائنٹر کے مقام سے شروع ہونے والے، نامزد سٹریم پر بائٹس کی ایک مخصوص تعداد لکھتا ہے۔ اگر 'put' پوائنٹر آخر میں ہے، تو فائل کو بڑھا دیا جاتا ہے۔ تاہم، اگر پوائنٹر فائل کے اندر ہے تو نیا ڈیٹا موجودہ حروف کو اوور رائٹ کر دیتا ہے۔ تحریری عمل کے دوران خرابی کی صورت میں، سلسلہ کو غلطی کی حالت میں نشان زد کیا جاتا ہے۔ اب، آئیے مثالوں کی طرف بڑھتے ہیں یہ سیکھنے کے لیے کہ بائنری فائل میں کچھ آسان اور بلٹ ان C++ فنکشنز کا استعمال کرتے ہوئے کیسے لکھنا ہے۔
طریقہ 1: سٹرکچرڈ ڈیٹا کے ساتھ بائنری فائلیں لکھنا
آپ کو بہت سے معاملات میں بائنری فائل میں سٹرکچرڈ ڈیٹا لکھنے کی ضرورت پڑسکتی ہے، جیسے کہ کسٹم اسٹرکچرز۔ آئیے ایک مثال پر غور کریں جس میں ایک شخص کا ریکارڈ موجود ہے جس میں کسی شخص کا نام، قد اور عمر شامل ہے۔ درج ذیل کوڈ کو دیکھیں اور وضاحت پر ایک نظر ڈالیں:
# شامل کریں
#include
ساخت شخص {
چار نام [ پچاس ] ;
int عمر ;
دگنا اونچائی ;
} ;
int مرکزی ( ) {
std :: آف اسٹریم آؤٹ فائل ( 'people.bin' ، std :: ios :: بائنری ) ;
اگر ( ! آؤٹ فائل کھلا ہے ( ) ) {
std :: cerr << 'خرابی! لکھنے کے لیے فائل نہیں کھول سکتا!' << std :: endl ;
واپسی 1 ;
}
شخص شخص 1 = { 'کلثوم الیاس' ، 25 ، 1.75 } ;
شخص شخص 2 = { 'کلثوم باجوہ' ، 30 ، 1.68 } ;
آؤٹ فائل لکھنا ( reinterpret_cast < چار *> ( اور شخص 1 ) ، کا سائز ( شخص 1 ) ) ;
آؤٹ فائل لکھنا ( reinterpret_cast < چار *> ( اور شخص2 ) ، کا سائز ( شخص2 ) ) ;
آؤٹ فائل بند کریں ( ) ;
std :: cout << 'اس شخص کا ریکارڈ بائنری فائل میں کامیابی سے لکھا گیا ہے۔' << std :: endl ;
واپسی 0 ;
}
یہاں مخصوص تفصیلات کے ساتھ کوڈ کی خرابی ہے۔ پروگرام 'Person' نامی اپنی مرضی کے ڈھانچے کی وضاحت کے ساتھ شروع ہوتا ہے۔ اس کے تین شعبے ہیں: نام، عمر اور قد۔ ان شعبوں کی تفصیلات درج ذیل ہیں:
- نام: شخص کا نام ذخیرہ کرنے کے لیے ایک تار (50 حروف تک)
- عمر: شخص کی عمر کو ذخیرہ کرنے کے لیے ایک عدد
- اونچائی: شخص کے قد کو ذخیرہ کرنے کے لیے ایک ڈبل
'Person' ڈھانچہ کی وضاحت کے بعد، مرکزی فنکشن شروع ہوتا ہے جو پروگرام کا انٹری پوائنٹ ہے۔ مین پروگرام کی پہلی لائن 'people.bin' نامی فائل کو کھولتی ہے۔ ہم ڈیٹا کو بائنری فارمیٹ میں لکھنے کے لیے 'people.bin' نام کی فائل بنانے کے لیے 'std::ofstream' استعمال کرتے ہیں۔ یہ چیک کرنا کہ آیا فائل کامیابی سے کھلتی ہے بہت اہم ہے۔ دوسری صورت میں، ایک غلطی کا پیغام دکھایا جاتا ہے اور پروگرام رک جاتا ہے. لہذا، 'if' حالت اور is_open() فنکشن کی مدد سے، ہم چیک کرتے ہیں کہ فائل کامیابی سے کھلی ہے یا نہیں۔
یہاں، دو 'Person' آبجیکٹ بنائے گئے ہیں۔ ہم دو متغیرات کی وضاحت کرتے ہیں، 'person1' اور 'person2'، 'Person' قسم کے۔ ہم 'کلثوم الیاس' اور 'کلثوم باجوہ' کے لیے متغیر نام، عمر اور قد کی قدریں تفویض کرتے ہیں۔
اب جب کہ ہمارے پاس بائنری فائل میں لکھنے کے لیے ڈیٹا موجود ہے، آئیے رائٹ() فنکشن کے ساتھ اصل فنکشن انجام دیں۔ ہم فائل میں ہر 'Person' آبجیکٹ کے مواد کو لکھنے کے لیے 'outFile.write' کا استعمال کرتے ہیں۔ 'reinterpret_cast
فائل پر ڈیٹا لکھنے کے بعد اسے صحیح طریقے سے بند کرنا بہت ضروری ہے تاکہ کسی دوسرے فنکشن کی وجہ سے ڈیٹا ضائع نہ ہو۔ ہم outFile.close() کا استعمال فائل سے وابستہ وسائل کو جاری کرنے اور اس بات کو یقینی بنانے کے لیے کرتے ہیں کہ ڈیٹا درست لکھا گیا ہے۔ آخر میں، ہم ایک پیغام پرنٹ کرتے ہیں جو بائنری فائل میں ڈیٹا کی کامیاب تحریر کی تصدیق کرتا ہے۔
اگر ہم اس مثال کو آسان الفاظ میں بیان کرتے ہیں، تو ایک خاص نوٹ بک کا تصور کریں جو صرف خفیہ زبان میں لوگوں کے بارے میں معلومات محفوظ کر سکے۔ یہ کوڈ معلومات (نام، عمر، قد) کو ترتیب دینے کے لیے ایک بلیو پرنٹ بناتا ہے۔ یہ نوٹ بک کو کھولتا ہے، دو لوگوں کے پروفائلز کو بھرتا ہے، معلومات کو خفیہ زبان میں ترجمہ کرتا ہے، اور اسے اندر صاف لکھتا ہے۔ اس کے بعد یہ نوٹ بک کو محفوظ طریقے سے بند کر دیتا ہے، مستقبل کے استعمال کے لیے پروفائلز کو محفوظ رکھتا ہے۔ پروگرام کے آؤٹ پٹ کا حوالہ دیں جو درج ذیل سنیپ شاٹ میں دیا گیا ہے:
طریقہ 2: بائنری فائل میں انٹیجرز لکھنا
اس طریقہ میں، عدد کی ایک صف کو بائنری فائل میں لکھا جاتا ہے جس کا نام 'integers.bin' ہے۔ 'reinterpret_cast
#include
int مرکزی ( ) {
std :: آف اسٹریم آؤٹ فائل ( 'integers.bin' ، std :: ios :: بائنری ) ;
اگر ( ! آؤٹ فائل کھلا ہے ( ) ) {
std :: cerr << 'خرابی! لکھنے کے لیے فائل نہیں کھول سکتا!' << std :: endl ;
واپسی 1 ;
}
int نمبرز [ ] = { 42 ، 99 ، - 1 ، 0 } ;
آؤٹ فائل لکھنا ( reinterpret_cast < چار *> ( نمبرز ) ، کا سائز ( نمبرز ) ) ;
آؤٹ فائل بند کریں ( ) ;
std :: cout << 'بائنری فائل میں دیے گئے انٹیجرز کامیابی کے ساتھ لکھے گئے۔' << std :: endl ;
واپسی 0 ;
}
یہاں مخصوص تفصیلات کے ساتھ کوڈ کی خرابی ہے:
'#include
اگلی لائن جو ہے 'int numbers[] = {42, 99, -1, 0};' عدد 42، 99، -1، اور 0 کے ساتھ 'نمبرز' نامی ایک صف کی وضاحت کرتا ہے۔ انٹیجرز کو بائنری فارمیٹ میں احتیاط سے ترجمہ کرتا ہے اور انہیں 'integer.bin' فائل میں لکھتا ہے۔ 'outFile.close();' انٹیجرز کو محفوظ اور منظم رکھنے کے لیے فائل کو صحیح طریقے سے بند کرتا ہے۔ آخر میں، اس بات کی تصدیق کرنے کے لیے ایک پیغام پرنٹ کیا جاتا ہے کہ بائنری فائل میں انٹیجرز کو کامیابی کے ساتھ محفوظ کیا گیا ہے۔ نتیجہ دیکھنے کے لیے اس پروگرام کے درج ذیل آؤٹ پٹ کو دیکھیں:
نتیجہ
مختلف قسم کے ڈیٹا کو مؤثر طریقے سے سنبھالنے کے لیے C++ میں بائنری فائلیں لکھنا ایک اہم ہنر ہے۔ C++ میں بائنری فائلیں لکھنے کی اس تحقیق میں، ہم نے سیکھا ہے کہ بائنری ڈیٹا کو مؤثر طریقے سے ہینڈل کرنے کے لیے 'آف اسٹریم' کلاس کو کس طرح استعمال کیا جا سکتا ہے۔ چاہے حسب ضرورت ڈھانچے کا استعمال کرتے ہوئے سادہ عدد یا سٹرکچرڈ ڈیٹا سے نمٹنا ہو، اس عمل میں فائل اسٹریم کھولنا، بائنری فارمیٹ میں ڈیٹا لکھنا، اور پھر فائل کو بند کرنا شامل ہے۔ یہ صلاحیت C++ ڈویلپرز کو بائنری ڈیٹا کی متنوع اقسام کے ساتھ کام کرنے کی لچک فراہم کرتی ہے، جو سسٹم لیول پروگرامنگ سے لے کر ملٹی میڈیا پروسیسنگ تک کی ایپلی کیشنز میں زبان کی استعداد میں حصہ ڈالتی ہے۔