 بسم اللہ الرحمن الرحیم، آج ہم مدیول 9 دیسکس کریں گے اس مدیول کے اندر ہم دیکھیں گے کہ آپ ایک فائل کو کیسے کوپی کر سکتے ہیں using windows apis پریویسلی ہم نے دیکھا تھا کہ ہم نے standard جو c لائب ریڈیہ اس کے جو function ہے file open کے file close کے اور file read write کے ان کو use کرتے ہوئے ہم نے file کو کوپی کیا تھا وہ standard function ہے وہ آپ کو ہر platform کے اندر available ہے ہم نے دونوں کے بیچ میں جو trade-offs ہے جو windows کے function ہے اور جو standard function ان کے بیچ میں trade-offs بھی دسکس کیا تھا تو آج ہم windows کے functions کو use کریں گے windows کے functions کو use کرتے ہوئے بالکل اسی طرح کہ ہم program بنایں گے جس کے اندر ہم file کو read کریں گے اور ultimately پھر file کو کوپی کریں گے تو اس program کو دیکھتے ہیں اس program کی code کے اندر آپ دیکھ سکتے ہیں جو سے پہلے windows.h کو include کیا گیا جہاں کہیں بھی آپ windows کے aps کو use کر رہے ہیں تو windows کے aps کے جترے بھی headers ہیں جترے بھی prototypes ہیں وہ windows.h کے اندر define ہے تو جب بھی آپ نے windows aps کو use کرنا ہے windows کے data structures کو use کرنا ہے آپ نے windows.h کو ضرور include کرنا ہے اور اس کے لوہ sttio کو بھی ہم نے بھی include کر لیا ہمارا main program اسی طرح سے ہی ہے argument we argument c command line parameters input لے رہا اس main program کے اندر ہم نے یہ ایک handle define کیا یہ windows کی اپنی data type ہے یہ یعنی کہ کوئی standard data type نہیں ہے یہ windows کی اپنی data type ہے یہ handle جو ہے this is a handle to a file ہم نے 2 handles define کر لیا ہے ہم نے h in اور h out ہم نے 2 word بھی define کر لیا ہے n in and n out یہ number of bytes ہمیں بتائیں گے جو ہم نے bytes input کیا ہے اور جو bytes ہم نے output کیا ہے اور ایک buffer size ہم نے define کر لیا buffer define کر لیا of size buff size buffer ہم نے previous دوسر program کے اندر بھی جس مقصد کے لیے use کیا تھا اسی مقصد کے لیے یہاں بھی buffer کو استعمال کرنے گے اور یہاں بھی دیکھیں ایک اور type ہمارے پاس lpw str lpw lp جس طرح ہم نے دیکھا تھا کہ شروع کے جو لیٹرز ہوتے ہیں وہ اس کی type کے بارے میں ہمیں انفرمیشن دیتے ہیں lp کا مطلب ہے long pointer اور w is for wide str is for string wide string wide string کا مطلب ہے کہ یہ ایک unicode کی string ہے اس کے اندر عام جو standard string ہوتی ہے وہ standard string جو ہے وہ asky کی string ہے اس کے اندر ایک byte جو ہے 8 bits کیا اس کے اندر 1 byte 16 bits کیا unicode کری کر رہا unicode کو store کری یہ string تو ہم نے یہ دو pointرز دفائن کر لیے ایک اندر ہم file 1 کا پاتھ سیف کریں گے اور دوسرے کے اندر ہم file 2 کا پاتھ سیف کریں گے اور انی file path کو کنٹرول کرنے کے لیے ہم نے دو variables بھی use کریں گے length 1 and length 2 کیونکہ command line parameters جو ہم input کریں گے وہ تو ہم asky کے اندر input کریں گے dos screen کے اوپر command line کے اوپر ہم keyboard سے asky characters ڈائپ کریں گے تو ان asky characters کو ان asky strings کو ہمیں convert کرنا پڑےگا into unicode وہ کیوں کرنا پڑےگا کیونکہ windows کی apa جو ہم یہاں پہستمال کریں گے وہ جو بھی string input لیری ہے وہ اس کو consider کریے کہ وہ unicode ہے اگر آپ windows vista use کریں یا اس سے hire کوئی بھی version use کریں گے تو اس کے اندر most of the apis کے لیے یہی ہی consider کیا جاتا ہے کہ آپ نے جو string اس کو pass کیا as a parameter that is in unicode اس سے previous versions کے اندر وہ asky بھی asky بھی use کی جا سکتی تھی اور unicode کے طور پہ بھی use کی جا سکتی تھی لیکن windows vista onwards یہ آپ سمجھلیں کہ یہ ایک rule define ہو گیا اور آگے بھی امید ہے کہ یہی rule carry out ہوگا تو کیوںکہ ہماری input asky input ہے تو ہمیں اس کو convert کرنا into unicode جو asky string ہے اس کو windows میں ایک اور نام بھی دیتا ہے اس کو کہا جاتا ہے multi byte character string mbcs multi byte character string اب یہاں پہ ہم دیکھیں گے کہ یہاں پہ ہم نے memory allocate کیا 512 bytes یہ maximum سائیز ہو سکتا ہے کسی بھی پیات کا تو ہم نے اتنے bytes allocate کر لیے یہ memory allocate ہو گی اور جس address پہ allocate ہوئی ہے وہ اس pointر کے اندر store ہو گیا سمجھللی بالکل یہی چیز ہم نے یہاں پہ بھی اسی طریقے سے کیا یہ تو ہمارے پاس memory allocate ہو گی unicode string کو store کرنے گلیا اب جو character input جو string input ہوئی ہے اس کو ہم نے convert کرنا into unicode اس کو unicode میں convert کرنے کیلئے ہمارا یہ function جوز ہو رہا ہے multi byte to white character white character ہے unicode کا character اور multi byte ہے asky character تو ہمیں multi byte string لیں گے اور اس کو convert کریں گے اس کو convert کریں گے into a unicode string multi byte string کس میں پڑی ہوئی ہے argument v value of the argument one جو آپ نے پہلی file name pass کیا وہ argument v1 کے اندر پڑا ہو گا اور اس کو convert کرنے ہیں ہم into unicode اور unicode میں convert کرنے کے بعد اس address پہ جو buffer پڑا ہوئے جو ہم نے 510 bytes کا define کر لیا اس buffer کے اندر یہ جاکے ہمیں کون کام کر کے دے رہا ہے multi byte to white character function یہ ایک function جو ہے اس argument v کو convert کرا ہے into unicode اور اس address کے اوپر جاکے store کرا ہے اب سمرلی جو دوسری ہم نے path input کیا اس کیلئے بلکول ہم یہی چیز کرے ہیں اس کو بھی ہم convert کرے ہیں unicode میں اور اس کا جو buffer ہے وہ ہم نے file2 کے اندر اس address پہ جاکے جو بھی unicode کی string آئی ہے اس کو store کر لیا ہے یہ ہم نے اس لئے کیا کیونکہ windows کی جو api ہے وہ رکوائر کرتی ہے کہ آپ جو اس کو string pass کریں وہ unicode میں جبکہ dos کے اندر ہم نے input دیتی وہ as کی کے اندر ہے اب اگل سٹیپ کے اندر ہم دیکھ سکتے ہیں کہ ہم نے file create کی file create تھوڑا سا ambiguous ہے ایک file create کیا وہ ہم نے copy کرنی ہے اور already exist کرتی ہے تو پھر ہمیں file create کرنے کی ضرورت کیا پڑی تو create file کی جو api ہے یہ dual purpose ہے آپ اسے ایک نئی file create بھی کر سکتے ہیں اور already created file کو open بھی کر سکتے ہیں تو already ہم جو ایک file پڑی ہم open کرنا چاہ رہے ہیں for generic read and specify کریں کہ read کیلئے file share کی جا سکتی ہے اور یہاں پر دیکھیں یہ فلاگ یہ بتا رہا ہے open existing یعنی کہ وہ کس طرح کی file کو open کرے گا جو already exist کرتی ہے اور ساتھ ساتھ ہم نے file attribute بھی اس کا specify کر دیا یا ہم طور پر ہم normalی رکھیں گے جب ہم existing file کو open کریں گے last parameter کی اندر نال ہے اس کی مزید detail جو وہ msd n کے اندر آپ دیکھ سکتے ہیں اور ہم آگے چل کے بھی اس کو in detail دیکھ سکتے ہیں file اگر open ہو جاتی ہے کسی کسم کا error نہیں آتا تو ہمیں hn جو کے handle ڈائی پر جس کی اس کے اندر اس file کا handle مل جائے گا تو یہاں پر ہم چیک کریں گے کہ یہ جو handle یہ in valid تو نہیں ہے اگر in valid ہے تو message آجے گا cannot open input file اور اگر valid ہے تو ہمارا program آگے چلے گا آگے ہم اب دوسری file کو بالکل اسی طریقے سے open کریں گے دوسری file کو open کریں گے تو اس کا handle وہ h out کے اندر ہمیں مل جائے گا یہاں پے جو file open ہوئی ہے وہ create ہوئی ہے اور generic right کے لیے open ہوئی ہے previous جو file تھی وہ generic read کے لیے open ہوئی ہے اور یہ والی file generic right کے لیے open ہوئی ہے یعنی کہ یہ ہماری destination file ہوگی جو read کے لیے open ہوئی ہے وہ ہماری source file ہے وہاں سے ہم data اٹھائیں گے اور write کریں گے دوسری file کے اوپر جو generic write کے اوپر open ہوئی ہے وہ ہماری destination ہے اس کے اوپر ہم نے اس source file کو copy کرنا یہاں پے بھی again ہم handle کو چیک کریں گے اگر handle invalid ہے تو اس کے اس کے اندر again messج آ جائے گا وانا execution آگے continue کریں گے آگے یہاں پے ہمار پاس ایک loop ہے جو کیا کرہا ہے ہر دفعہ file کو read کرتا اور file کو read کر کے دیکھتا ہے کہ کسی کسم کا error تو نہیں آیا جو number of bytes جو read ہوئے ہیں that should be greater than zero اگر greater than zero ہے اس کا مطلب ہے کچھ نہ کچھ data ضرور read ہوئے read file آپ کو کیا return کرا ہے number of bytes جو اس نے actual read کیا آپ کس کو read کریں hn input file کو جو آپ کی source file ہے اس کو read کریں read کر کے جو اس کا data ہے وہ کس میں جائے گا buffer میں جائے گا اور کتنے bytes read کریں جتنا buffer کا size ہے read کرنے کے بعد آپ write کریں کیا write کریں جو بھی data آپ نے read کیا buffer کے اندر کس کے اوپر write کریں h out کے اوپر جو آپ کی source file ہے اور کتنے bytes read کریں جتنے کے actually read ہوئے ہیں جو ہمیں یہ والا variable دے رہا ہے یہ ہمیں بتا رہا ہے کہ actually کتنے bytes read ہوئے ہیں ضروری نہیں کہ جتنے آپ نے اس کو bytes کہیں buffer size buffer size is 256 آپ نے اسے کہا کہ 256 bytes read کریں لیکن file کے اندر 256 bytes آئی نہیں تو actually 256 bytes نہیں read ہوں گے اگر سے file کے اندر 80 bytes ہیں تو 80 bytes read ہوں گے تو ہمیں n in وہ بتا رہا ہے کہ actual کتنے number of bytes read ہوئے اتنے number of bytes جویں اس output file کے اوپر write ہو جائیں گے اور یہ loop چلتا رہے گا کب تک چلتا رہے گا جب تک کچھ نہ کچھ read ہو رہا یہ value نگیٹو میں چلی جاتی یا zero جاتی ہے تو یہ loop تربینیٹ ہو جائے گا ان کیس number of bytes جو ہم نے read کیا ہے اور number of bytes جو آپ نے output کیا ہے وہ دونوں سیم نہیں ہے آپ یہ operation پرفوم کرتے ہیں کچھ bytes read کرتے ہیں اور پھر اتنے بھائٹس write کرتے ہیں جتنے bytes read کیا ہے کسی وجہ سے اتنے bytes آپ write نہیں کر پاتے ہیں یا number of bytes read کیا ہے اور number of bytes write کیا ہے وہ کسی وجہ سے سیم نہیں ہے اور دونوں فائل حنڈلز کلوز کر دے جا گا اور program طور پروئیت دیکھتا ہے ان کس یہ loop چلتا رہتا ہے ہمسک آئے ہیں اللوگ تربینیٹ auch اور آپ دونوں فائل حنڈلز پروئیت ہے آپ کو آپ کو اللوگ طربینیٹ introduce چلتا ہے اور program پرونٹر اپتا ہے آپ کے ہاتھ بسپائل جس کا پر کمار لائن یہ بات پرزا میں پرساہا ہے جائے جائے جائے کمانڈ لائن پر سپیسفائی کیا وہ سورس فائل جو ہے وہ دیسنیشن کے اوپر as it is کوپی ہو جائے گی اب اس کا دیمو دیکھتے ہیں یہاں بھی ہم دیکھ سکتے ہیں کہ یہ فولڈر ہے جس فولڈر کے اندر ہماری ڈیزی فائل بنیئے ہیں اب اس ڈیزی فائل کو ہم ران کریں گے اور ایک فائل کو دوسی فائل کو پر کوپی کرنے کی کوشش کرتے ہیں پہلے ہم ایک فائل کریٹ کر لیتے ہیں اس کے اندر دمی کریکٹرز کچھ دال دیے اور f6 پرس کر کے آپ اس کو سیف کر رہے یہ فائل سیف ہوگی ہے اب ہم اس پوگرام کو ران کرتے ہیں ایک ڈی فائل کو ران کرنا پڑھے گا جب ایک ڈی فائل کا نام cpw ہے اس کے ساتھ ہم اپنی پرامیٹر دیتے ہیں جو ہمارا فائل لیئے میں a.txt اور جو دیسنیشن ہے کچھ بھی رکھ لیں سے c.txt اب یہ آپ دیکھ سکتے ہیں دریکٹی لیسٹنگ میں c.txt نہیں شوہ رہی ہم نے یہ ران کیا آپ دریکٹی لیسٹنگ دیتے ہیں یہ آپ دیکھ سکتے ہیں c.txt فائل بن گیا اور اس کو اتنا سایز ہے جتنا a.txt کا