 بسم اللہ الرحمن الرحیم، آج ہم موڈیول 38 دیسکس کریں گے موڈیول 38 ہے about listing file attributes پریویس لی ہم نے دیکھا ہے کہ سرٹن ہم نے API's دیکھی ہیں جنسے کہ آپ فائل کے اٹریبوٹ get کر سکتے ہیں پھر ہم نے کچھ API's دیکھی ہیں جنسے کہ آپ فائل کی listing get کر سکتے ہیں آپ دیکھ سکتے ہیں کہ کسی سپسفک دیرکٹری کے اندر کون کنسی فائلز ہیں اور کون کنسے فولڈرز ہیں اس کا سوان آپ پورے دیرکٹری سٹرکچر کو ٹریورز کر سکتے ہیں تو وہی ساری چیزیں use کر کے ہم ایک فائل لسٹنگ کریں گے جس کی اندر ہم فائلز کو شو کریں گے اور ساتھ ان کے اٹریبوٹس کو بھی دیسپلے کریں گے اس کے اندر ایک اپلکیشن بنائی گی وہ اپلکیشن سرٹن پرمیٹرز لی رہی ہے اپلکیشن کا نام اس و یہ نام رکھا گئے کہ انکے یونیکس کے اندر بی اسی نام کی ایک ایٹلیٹی exist کرتی ہے جو exactly یہی کام کرتی ہے تو اسی طرح کی یہاں بھی ہم ایٹلیٹی بنائرہے ہیں اس کے دو پرمیٹرز ہیں ایک ہم اس کو option کا جو ہم نے previously function discuss کیا تھا اس کو use کرتے ہوئے ہم دو طرح کے پرمیٹرز سوچس پورائیٹ کر رہے ہیں ایک L اور ایک R L جو ہے وہ normal listing ہے جو بھی current directory ہوگی اس کی وہ listing show کر دے گا یا جو بھی آپ نے specify کیا ہوگا path relative path اس کی وہ listing show کر دے گا اور دوسرا ہے R R is for recursive recursive کے کس کے اندر وہ recursively جو بھی directory ہے اس کو travers کرے گا یعنی کہ ایک folder ہے اس folder کے اندر مزید folder ہے پھر اس کے اندر مزید folder ہے وہ ہر level تک ہر folder کے اندر جائے گا اور ساری files کو travers کرے گا اور ان ساروں کے attributes show کرے گا پھر یہ پکرام کچھ اس طریق سے develop کیا ہے کہ یہ جو current path ہے اس کے relatively work کر رہا ہے absolute path کو یہ consider نہیں کر رہا ہے لیکن اس پکرام کو of course ہم چیج کر سکتے تھا کہ یہ absolute path کیلئے بھی work کر ہے تو یہ ایک طرح سے آپ کیلئے assignment ہو سکتے کہ آپ اس کو دیکھیں کہ یہ absolute paths کیلئے کیسے work کرے گا فلال یہ اس طریق سے design کیا گیا کہ یہ current path کو اس کو travers کرے گا اور اس کے اندر اگر آپ نے recursive کی option use کیا تو وہ recursively اس کے اندر جو سب دیریکٹریز ہیں foldرز ہیں ان ساروں کو travers کرے گا اور ان کے file attributes سا سا display کرے گا آئے وہ پکرام دیکھتے ہیں اس پکرام کے اندر ہمارے پاس تین function نے جو ہم نے develop کیا ایک function at travers directory ایک function at file type اور ایک function at process item process item سیمپلی جو بھی اس کو file وغیرہ ملے گی اس کے attributes کو سیمپلی display کر دے گا یعنی کہ اس کو process کرے گا file type جو ہے اس کے مدر سے ہمیں file کی type پتہ چلے گی file کیس طرح کی ہے اور travers directory جو ہے وہ recursively depending upon the options given recursively جو directory structure ہے اس کو travers کرنے کی capability رکھتا تو اس main کے اندر دیکھیں main کے اندر ہم نے کے اندر سب سے پہلہ تو چیک ہم نے یہ رکھا ہے کہ جو current directory ہے اس کا پات کی کتنی لنگت ہے اور اگر پات کی لنگت میکس سے ایک exceed کری ہے تو of course اس کے اس میں ہم کچھ نہیں کر سکتے اور اگر exceed نہیں کری پھر ہم آگے جائیں گے اب یہاں پر ہم travers directory کا function call کرے اس کو ہم current path specify کریں یہاں پر ہمارا ویریول ہے جس کے اندر ہم نے current path specify کیا ہے اور یہاں پہلے else part کی اندر ہم argument count جو بھی ہمارا ہمارے کمانڈ لین پیرمیٹرز ہے argument count ایک loop چھلا رہے ہیں اور اس کے اندر جو ہماری argument's کی value ہے اس کو چیک کریں کوئی بھی value جو ہے وہ max path سے exceed نہیں کرنی چاہی ہے in case وہ exceed کرتی ہے again یہاں پہلے error آجائے گا اب یہاں پہ ہمارے پاس جو argument we اور argument جو بالکل end والا پیرمیٹر ہے ہمارے کمانڈ لین پیرمیٹرز کے اندر وہ آپ کا پیات ہے تو ہم نے یہاں پہ دو variables بنائے میں ایک search pattern اور ایک parent path ان دونوں variables کو ہم جو given path ہے اس سے initialize کر دیتے ہیں اس کے اندر search pattern بھی آدے گا کہ اگر آپ کسی ایک specific extension کی file کو search کرنا جا رہے ہیں تو اس کے according لیہاں wild card specify کر کے آپ اس کی extension specify کریں گے اور parent path کیا ہوگا کہ وہ امرہ starting path ہے اور اگر اپنے recursive option use کیا تو وہاں سے onwards ہم اس کو recursively traverse کرنے شروع کر دیں گے تو امرہ parent path ہے starting path اور پھر یہ یہاں پھے کچھ checks ہیں کہ یہ null نہ ہو وغیرہ وغیرہ اور parent path کو set کر دیا ہم نے as our current directory جو parent path کو as current directory set کر دیا تو وہاں سے ہم اپنی processing start کر دیں یہاں پہ ہم parent path کو as current directory set کرنے کے بعد traverse directory کرتے ہیں traverse directory کا function parent path لے گا search pattern لے گا اور جو بھی options آپ نے specify کیا ہی ہیں اس کے بعد جو اس کو ایک نئی directory ملتی ہے current path کے اندر جب وہ traverse کرتا اس کو ایک نئی directory ملتی ہے تو اس کو again set کرا as current directory یہاں بھی ہم دیکھ سکتے ہیں یہاں مین جو function ہے یہ بسکلی امرے traverse directory function کو call کرا ہے پہلے جو اس کو parameters pass میں اس میں سے pattern لیتا ہے اس میں سے جو current path ہے وہ لیتا ہے وہ اس کو traverse directory کو pass کرتا ہے اور pass کرنے کے بعد اس کو جو بھی options تھے وہ بھی ساتھ pass کرتا ہے options کیا ہیں ہمارے پس کیا آپ نے simple listing لینی ہے یا recursive processing کرنی ہے اب traverse directory جو ہے وہ ان values کو use کرے گی وہ function جو ہے ان values کو use کرے گا وہ دیکھتنے simple listing ہے اگر simple listing ہے تو اس current directory کے اندر جتنے بھی file جو ان کو سمپلی list کر دے گا اور ساتھ ان کے attribute show کر دے گا اور اگر recursive processing کرنی ہے تو وہ جو بھی ایک directory ہے اس directory کو لے گا اور اس کے اندر recursively جاتا جائے گا اب آگے ہم traverse directory کے function کو دیکھتے ہیں traverse directory کا جو function ہے یہ وہ ہمارا جو search pattern ہے اس کو use کرا رہا اور یہ یہاں parent path کے اندر جو last occurrence ہاری ہے slash کی اس پہ جا رہا اور وہاں سے آگے ہمارے parent path کے اوپر یہ جو ہے slash اس کو اگر slash نہیں ہے تو وہاں پہ یہ slash insert کر دے گا اس کے بعد یہاں پہ یہ ایک loop چل رہا یہ loop جو ہے دیکھ گا کہ کتنے یہ دو passes کے لیے چل رہا پہلے ہم first pass کے لیے چلاتے ہیں first pass کے اندر وہ سمپلی files کو list کرے گا اس کے اندر یہ جو بھی آپ نے search pattern specify کیا ہے اس search pattern کو use کرتے ہوئے آپ نے first file find out کی اور چک کیا ہے کہ اس کا handle invalid تو نہیں ایہ invalid ہے تو اس کے اس میں of course error آ جائے گا اور in case یہاں پہ یہاں پہ ہمارا ایک while loop ہے یہ do while loop یہ do while loop جو ہے next file کرتے دے گا جب تک next file ہوری ہے یہ loop چل تا رہ گا جب تک next file کچھ return کر رہا یہ loop جو ہے ہمارا چل تا رہ گا اب اس loop کی اندر آپ سمپلی چیک کریں گے کہ یہ کنسا پایس ہے پایس اگر one ہے تو آپ نے just process کرنا ہے item جو بھی آپ کو ڈیٹا ملا ہے اس کو process کرنا ہے اور جو parent path ہورا اس کی length کو use کرتے اس کو display کر دیا اور اس کے لوہ آپ یہاں پہ دیکھ رہے ہیں کہ اگر اس کی type directory ہے یہاں پہ بہت importantly اگر اس کی type directory ہے تو یہ اس directory کے اندر چلا جائے گا current directory اپنی چینج کر دے گا جو بھی اس کو directory ملی وہ directory اس نے یہاں پہ چینج کر دی اور چینج کرنے کے بعد اب اس directory کے اندر again وہ traverse directory کو call کرا یعنی کہ recursively اسی directory کو پھر سے traverse کرا اور یہاں پہ ایک یہ چیک جو ہے یہ یہاں پہ set current directory اس لی کیا جا رہا ہے کہ ایک جو آپ level آگیا جا رہا ہے کہ آپ واپس اسی level پہ جا رہا ہے اس level کے باقی جو directories ان کو traverse کر سکیں double dot کا مطلب ہے کہ آپ ایک level پیچھے آگے جب آپ کو ایک directory ملی تو آپ ایک level آگے آگے اس directory کے اندر جا کے آپ نے traverse کو call کیا اس نے اساری directory کو traverse کر دی ہے recursively once وہ traverse ہو جاتی ہے تو اس کے بعد پھر آپ نے ایک level پیچھے جانا ہے اور previous your directory اس کے next item کوٹھانا ہے again find next item کوٹھائے گا next item کوٹھانے کے بعد again یہی چیز پھر سے repeat ہوگی اور یہ repeat ہوتی جائے گی جب تک کہ اس specific directory کے اندر سارے جتنے بھی items وہ traverse نہیں ہو جاتے یعنی کہ اگر آپ کے پاس ایک directory ہے اس directory کے اندر ایک folder ہے ایک folder ہے پرز کریں کہ یہ والا folder traverse ہوا تو اس نے folder کو traverse کیا اس کے لئے اس نے traverse directory کا function call کر دیا جب اس نے traverse directory کا function call ہوا تو اس کے اندر جتنی بھی files دی وہ traverse ہوں گی اگر کوئی folder ہے تو وہ folder بھی traverse ہوگا اور اس folder کے اندر جاکے مزید جتنی files ہے ان کو بھی traverse کرے گا اور اگر کوئی folder ہے تو مزید ان کو traverse کرے گا اس تان رکرسیب لی یہ کرتا جائے گا جب یہ recursion return کرے گی یہاں پہ واپس آئے گا تو اب یہ folder جو ہے اس folder کے اندر کیونکہ وہ چلا گیا تھا اب اس نے واپس اس level پہ آنے اس level پہ آنے جب ایک level پیچھے گیا اب وہ اس دریکٹری کا جو next item ہے اس کو traverse کر سکتا ہے اگن یہ loop کی مدل سے پھر سے next time اس item کو traverse کرے گا اور اس کو بھی again recursively traverse کرے گا لیکن اس سب کے لیے جو ہماری recursive option ہے وہ set ہوں تو یہاں پہ یہ recursive option کو بھی چیک کر رہا ہمارا جو options کا function اور اگر وہ set ہے تو صرف تب ہی اسی کس کے اندر ایسا اکر ہوگا ہمارا یہ file type کا function ہے یہ file type کا function سم پلی آپ سے file ڈیٹا لیتا ہے اور اس کی جو file type اس کو یہ return کر دیتا ہے یہ یہاں پہ جو بھی اس کا نام ہے ڈبل ڈارٹ ہے یا ڈارٹ ہے اس کے جو بھی اگر ڈریکٹری ہے تو وہ دیکھ گا اس کے attributes اور attribute اگر ڈریکٹری attribute ہے تو اس کس کے اندر اس ڈییر کا جو value ہے وہ true ہوگی یا false ہوگے گا اگر وہ ڈریکٹری ہے تو اس کو کو چیک کرے گا کیا یہ ڈارٹ ہے یا ڈبل ڈارٹ ہے اگر ڈارٹ یا ڈبل ڈارٹ ہے تو اس کس کے اندر وہ اس کی type return کرے گا type ڈارٹ اور type ڈیییر یہ جو type otherwise type ڈییر return کرے گا کیونکہ آپ اس کس میں صرف ڈییر ڈیییر ڈیییر کہ یہ کوئی ڈارٹ تو نہیں ہے تو اگر ڈارٹ ہے تو اس کو Traverse نہیں کیا جائے گا اب یہاں پر سیمپل process item کا function ہے process item کا function جو ہے اس کو just a file ڈیٹا پاس کریں گے جب آپ نے وہاں سے اس کے attributes get کیا attribute get کرنے کے بعد آپ نے file ڈیٹا ادھر اس کو pass کیا جو بھی file ڈیٹا اس کو pass کیا اس کو یہ سمplی ادھر print کے function سے format کر کے آپ کو display کر دے گا تو جو جو attribute display کرا day our time size v1 تو جو جو attribute display کرا اور بھی اگر کو attribute display کرنا چاہے آپ اس طرح سے file name اور بھی attribute get کر کے ان کو آپ اس طرح سے format کر کے display کر سکتے ہیں