C++ میں بائنری فائل لکھیں۔

C My Baynry Fayl Lk Y



C++ پروگرامنگ میں، بائنری فائلوں سے نمٹنا خام ڈیٹا کو اسٹور کرنے اور اس میں ہیرا پھیری کرنے کے لیے بنیادی ہے۔ چاہے آپ تصاویر، آڈیو فائلوں، یا حسب ضرورت ڈیٹا ڈھانچے کے ساتھ کام کر رہے ہوں، بائنری فائلوں کو مؤثر طریقے سے لکھنے کی صلاحیت بہت اہم ہے۔ بائنری فائلیں ڈیٹا کو ایک ایسی شکل میں اسٹور کرتی ہیں جو انسان کے پڑھنے کے قابل نہیں ہے، جس سے وہ مختلف ایپلی کیشنز کے لیے موزوں بناتے ہیں جیسے کہ پیچیدہ ڈھانچے، تصاویر، یا کوئی بھی ڈیٹا جو سادہ متن پر مبنی نمائندگی کی پیروی نہیں کرتا ہے۔

C++ بائنری فائلوں کے ساتھ تعامل کرنے کے لیے لائبریری فراہم کرتا ہے، خاص طور پر 'آف اسٹریم' کلاس، بائنری ڈیٹا لکھنے کے لیے۔ یہ صلاحیت ڈویلپرز کو بغیر کسی رکاوٹ کے بائنری فائلوں کو بنانے، ان میں ترمیم کرنے اور ان کا نظم کرنے کی اجازت دیتی ہے۔ یہ مضمون بائنری فائلوں کو 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(&person1)' اور 'reinterpret_cast(&person2)' پورے 'Person' ڈھانچے کو (بشمول اس کے تمام فیلڈز) کو بائٹس کے ایک مسلسل سلسلے میں تبدیل کرتے ہیں جو بائنری فائل میں لکھنے کے لیے موزوں ہے۔ . ہم ہر 'Person' آبجیکٹ کا سائز 'sizeof(person1)' اور 'sizeof(person2)' کا استعمال کرتے ہوئے لکھتے ہیں تاکہ یہ یقینی بنایا جا سکے کہ تمام ڈیٹا صحیح لکھا گیا ہے۔



فائل پر ڈیٹا لکھنے کے بعد اسے صحیح طریقے سے بند کرنا بہت ضروری ہے تاکہ کسی دوسرے فنکشن کی وجہ سے ڈیٹا ضائع نہ ہو۔ ہم 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 ' اور '#include ' بالترتیب فائلوں کے ساتھ کام کرنے اور پیغامات جیسے cin اور write() پرنٹ کرنے کے لیے ضروری ٹولز لاتے ہیں۔ 'std::ofstream outFile('integers.bin', std::ios::binary);' 'integers.bin' کے نام سے ایک بائنری فائل کھولتا ہے جو صرف خفیہ کوڈ (بائنری فارمیٹ) میں نمبرز کو اسٹور کر سکتی ہے۔ یہ چیک کرتا ہے کہ آیا فائل کھلی ہے۔ دوسری صورت میں، ایک غلطی کا پیغام دیا جاتا ہے.

اگلی لائن جو ہے 'int numbers[] = {42, 99, -1, 0};' عدد 42، 99، -1، اور 0 کے ساتھ 'نمبرز' نامی ایک صف کی وضاحت کرتا ہے۔ انٹیجرز کو بائنری فارمیٹ میں احتیاط سے ترجمہ کرتا ہے اور انہیں 'integer.bin' فائل میں لکھتا ہے۔ 'outFile.close();' انٹیجرز کو محفوظ اور منظم رکھنے کے لیے فائل کو صحیح طریقے سے بند کرتا ہے۔ آخر میں، اس بات کی تصدیق کرنے کے لیے ایک پیغام پرنٹ کیا جاتا ہے کہ بائنری فائل میں انٹیجرز کو کامیابی کے ساتھ محفوظ کیا گیا ہے۔ نتیجہ دیکھنے کے لیے اس پروگرام کے درج ذیل آؤٹ پٹ کو دیکھیں:

نتیجہ

مختلف قسم کے ڈیٹا کو مؤثر طریقے سے سنبھالنے کے لیے C++ میں بائنری فائلیں لکھنا ایک اہم ہنر ہے۔ C++ میں بائنری فائلیں لکھنے کی اس تحقیق میں، ہم نے سیکھا ہے کہ بائنری ڈیٹا کو مؤثر طریقے سے ہینڈل کرنے کے لیے 'آف اسٹریم' کلاس کو کس طرح استعمال کیا جا سکتا ہے۔ چاہے حسب ضرورت ڈھانچے کا استعمال کرتے ہوئے سادہ عدد یا سٹرکچرڈ ڈیٹا سے نمٹنا ہو، اس عمل میں فائل اسٹریم کھولنا، بائنری فارمیٹ میں ڈیٹا لکھنا، اور پھر فائل کو بند کرنا شامل ہے۔ یہ صلاحیت C++ ڈویلپرز کو بائنری ڈیٹا کی متنوع اقسام کے ساتھ کام کرنے کی لچک فراہم کرتی ہے، جو سسٹم لیول پروگرامنگ سے لے کر ملٹی میڈیا پروسیسنگ تک کی ایپلی کیشنز میں زبان کی استعداد میں حصہ ڈالتی ہے۔