[Powered by Google Translate] [فائل I / O] [جیسن Hirschhorn، ہارورڈ یونیورسٹی] [یہ CS50 ہے، CS50.TV] کیا آتا ہے جب ہم ایک فائل کے بارے میں سوچتے ہیں، ذہن Microsoft Word دستاویز ہے، ایک JPEG تصویر، یا ایک MP3 نغمے کی، اور ہم مختلف طریقوں سے فائلوں کی ان اقسام میں سے ہر ایک کے ساتھ بات چیت. مثال کے طور پر، ہم نے ایک لفظ دستاویز میں متن شامل جب ہم ایک JPEG تصویر کے ساتھ باہر کناروں کو تراشیں یا رنگ retouch ہو سکتا ہے. لیکن ہڈ کے تحت ہمارے کمپیوٹر میں فائلوں کی سب سے زیادہ کچھ نہیں ہے zeros اور ہیں کی ایک طویل ترتیب سے. یہ خاص درخواست ہے کہ فائل کے ساتھ انٹرایکٹ ہے فیصلہ کس طرح اس طویل ترتیب پر عملدرآمد کریں اور صارف کو پیش کر. ایک طرف، ایک دستاویز میں صرف ایک بائٹ میں نظر ہو سکتا ہے، یا 8 zeros اور ہیں، اور سکرین پر ایک ASCII کردار کو ظاہر کریں. دوسری طرف، ایک بٹ نقشہ تصویر 3 بائٹس کو دیکھو ہو سکتا ہے، یا 24 zeros اور ہیں اور ان کے 3 شش اعشاری تعداد کے طور پر تشریح جو سرخ، سبز، اور نیلے رنگ کے لئے اقدار کی نمائندگی کرتی ہیں ایک تصویر کے ایک پکسل میں. جو کچھ بھی وہ چاہتے ہیں ان کے مرکز میں آپ کی سکرین پر دیکھ سکتے ہیں، فائلوں zeros اور والوں میں ایک ہی تسلسل سے کچھ نہیں ہیں. تو چلو میں کودو اور کو دیکھو، کس طرح ہم واقعی ان zeros اور ہیں جوڑتوڑ یہ لکھنے اور ایک فائل سے پڑھنے کے لئے جب آتا ہے. میں یہ ایک آسان حصہ 3 کے عمل میں توڑ نیچے کی طرف سے شروع کریں گے. اگلا، میں دو کوڈ مثال کے طور پر ہے جو ان تین حصوں کا مظاہرہ میں کودو گے. آخر میں، میں عمل کا جائزہ لیں گے اور اس کی سب سے اہم تفصیلات میں سے کچھ کریں گے. کے طور پر، کسی بھی فائل ہے کہ آپ کے ڈیسک ٹاپ پر بیٹھا ہے کے ساتھ، اسے کھولنے کے لئے سب سے پہلے کام کرنا ہے. C میں ہم پیش وضاحتی struct پوائنٹر اعلان کر ایسا جو ڈسک پر فائل کی نمائندگی کرتا ہے. اس فنکشن کال میں، ہم نے یہ بھی فیصلہ کریں گے کہ ہم لکھنے یا فائل سے پڑھ کرنا چاہتے ہیں. اگلا، ہم اصل پڑھنے اور لکھنے کرتے ہیں. خصوصی کے افعال میں سے ایک بڑی تعداد ہے ہم اس حصہ میں استعمال کر سکتے ہیں ہیں، اور ان میں سے تقریبا تمام خط F، جو کہ فائل کے لئے کھڑا ہے کے ساتھ شروع ہو جاتے ہیں. آخری فائلوں کے سب سے اوپر کونے میں لٹل ریڈ X کے مشابہ کھولتے ہیں تو، آپ کے کمپیوٹر پر ہم ایک حتمی تقریب کی کال کے ساتھ فائل بند کرو. اب جب کہ ہم نے کہ ہم کیا کرنے جا رہے ہیں ایک عام خیال ہے، کوڈ میں کودو. اس ڈائریکٹری میں، ہم دو C فائلوں اور ان کی اسی کارکردگی قابل فائلوں کو ہے. ٹائپ رائٹر پروگرام ایک کمانڈ لائن دلیل لیتا ہے، دستاویز کے نام پر ہم پیدا کرنا چاہتے ہیں. اس صورت میں، ہم اسے doc.txt فون کریں گے. چلو پروگرام چلائیں اور لائنوں میں سے ایک جوڑے درج کریں. ہیلو. میرا نام Jason ہے. آخر میں، ہم ٹائپ "چھوڑ دیا." گے اگر ہم اب اس ڈائریکٹری میں فائلوں کی تمام فہرست ہم دیکھتے ہیں کہ ایک نئی دستاویز doc.txt کہا جاتا ہے موجود ہے. وہ فائل میں یہ صرف پیدا پروگرام ہے. اور ظاہر کی، یہ بھی zeros اور ہیں کی ایک طویل ترتیب سے زیادہ کچھ نہیں ہے. اگر ہم اس نئی فائل کو کھولنے، ہم نے کوڈ کی 3 لائنیں ہم اپنے پروگرام میں داخل ہوئے ہیں - ہیلو. مئی نام Jason ہے. لیکن جو اصل میں جب typewriter.c چلتا ہے پر جا رہا ہے؟ ہمارے لئے سود کی پہلی سطر 24 اوپر ہے. اس لائن میں، ہم ہماری فائل پوائنٹر کا اعلان. تقریب جو اس پوائنٹر، fopen واپس، دو دلائل لیتا ہے. اگر مناسب ہو تو فائل چڑھانے کی کوشش بھی شامل ہے پہلی فائل کا نام ہے. کو یاد ہوگا کہ ایک فائل چڑھانے کی کوشش میں اپنی کم ترین سطح پر فائل کو متاثر نہیں کرتی. ہم نے ہمیشہ zeros اور ہیں کی ایک طویل ترتیب کے ساتھ کام کر رہے ہو. لیکن یہ اثر و رسوخ ہے کہ کس طرح فائلوں کی تشریح کیا ایپلی کیشنز ان کو کھولنے کے لئے استعمال کیا جاتا ہے. دوسری fopen پر دلیل کسی ایک خط ہے ہے کہ جو ہم نے کے بعد ہم فائل کو کھولنے کی منصوبہ بندی کے لئے کھڑا ہے. W، R، اور A. اس دلیل کے لئے تین اختیارات ہیں - ہم اس معاملے میں ڈبلیو کا انتخاب کیا ہے کیونکہ ہم فائل میں لکھنے کے لئے چاہتے ہیں. R، جیسا کہ آپ شاید اندازہ لگا سکتے ہیں، فائل پڑھنے کے لئے ہے. اور ایک فائل appending کے لئے ہے. جبکہ دونوں W اور فائلوں کو لکھنے کے لئے استعمال کیا جا سکتا ہے W فائل کے شروع سے ہی لکھنا شروع کریں گے اور ممکنہ طور پر کسی بھی ڈیٹا ادلیکھت ہو چکے ہیں جو کہ پہلے کیا گیا ہے ذخیرہ. ڈیفالٹ کی طرف سے، فائل ہم اگر یہ پہلے سے ہی موجود نہیں ہے کھول ہمارے موجودہ ورکنگ ڈائریکٹری میں پیدا کیا. تاہم، اگر ہم یا بنانے کے لئے ایک مختلف مقام میں ایک فائل تک رسائی حاصل کرنا چاہتے ہیں fopen کی پہلی دلیل ہم فائل کے نام کے علاوہ میں ایک فائل کا پاتھ کی وضاحت کر سکتے ہیں. اگرچہ اس عمل کا پہلا حصہ طویل عرصے سے کوڈ کا صرف ایک ہی لائن میں ہے، یہ ہمیشہ اچھی پریکٹس لائنوں کی ایک اور سیٹ بھی شامل کہ اس بات کا یقین کرنے کے لئے کہ فائل کامیابی سے کھول دیا گیا تھا یا پیدا چیک کرنے کے لیے. اگر fopen شہوت انگیز null واپس، ہم ہمارے پروگرام کو مزید آگے بڑھانے چاہتے ہیں نہیں کریں گے، اور یہ ہوگا اگر آپریٹنگ سسٹم میموری سے باہر ہے یا اگر ہم ایک ڈائریکٹری ہے جس کے لئے ہم مناسب اجازت نہیں تھا میں ایک فائل کھولنے کی کوشش کرتے ہیں. عمل کے دو حصہ ٹائپ رائٹر کی جبکہ لوپ میں جگہ لیتا ہے. ہم CS50 لائبریری تقریب کا استعمال کرتے ہیں صارف کی طرف سے ان پٹ حاصل کرنے کے لئے، سنبھالنے اور وہ پروگرام چھوڑ نہیں کرنا چاہتا، ہم تقریب کے fputs کو استعمال کرتے ہوئے سٹرنگ کو لینے کے لئے اور لکھنے کی فائل ہے. fputs صرف بہت سے افعال میں سے ایک ہم فائل کو لکھنے کے لئے استعمال کر سکتے ہیں ہے. دیگر میں fwrite، fputc، اور اس سے بھی fprintf شامل ہیں. سے قطع نظر ہم نے خاص طور پر تقریب کی کا استعمال کرتے ہوئے ختم، تاہم، ان میں سے سب کو پتہ کی ضرورت ہے، ان کے دلائل کے ذریعے، کم از کم دو چیزیں - لکھا جہاں یہ لکھا جائے گا کی ضرورت ہے کیا ضرورت ہے. ہمارے معاملے میں، ان پٹ سٹرنگ ہے کہ لکھا جائے کرنے کی ضرورت ہے ہے اور FP پوائنٹر کہ ہمیں جہاں ہم لکھ رہے ہیں کہ ہدایت ہے. اس پروگرام میں، عمل کے دو حصے کی بجائے براہ راست ہے. ہم صرف صارف سے ایک سٹرنگ لے رہے ہیں اور اس کے ساتھ براہ راست کو شامل کرنے سے ہماری فائل تھوڑا-نہیں. ان پٹ کی توثیق یا سیکورٹی چیکنگ میں تاہم اکثر، دو حصہ آپ کے کوڈ کا بڑا حصہ لیں گے. آخر میں، تین حصہ 58 لائن پر ہے، جہاں ہم نے فائل بند. یہاں ہم اس کے پاس ہماری اصل فائل پوائنٹر fclose کہتے ہیں. بعد لائن میں، ہم صفر واپس، ہمارے پروگرام کے آخر کا اشارہ ہے. اور، جی ہاں، تین حصہ اس کے طور پر کے طور پر آسان ہے. چلو فائلوں سے پڑھنے پر منتقل. پیچھے ہماری ڈائرکٹری میں ہم نے ایک فائل کہا جاتا printer.c ہے. یہ فائل ہم صرف پیدا کے ساتھ چلانے کے دو - doc.txt. یہ پروگرام، جیسا کہ نام سے پتہ چلتا ہے، صرف پرنٹ فائل کے مواد کو اس کے منظور کریں گے. اور ہم وہاں ہے. کوڈ کی لائنیں ہم پہلے ٹائپ تھا doc.txt میں محفوظ ہے. ہیلو. میرا نام Jason ہے. اگر printer.c میں ہم کودو، ہم دیکھتے ہیں کہ کے کوڈ کا ایک بہت کیا ہم صرف typewriter.c میں کے ذریعے واک کی طرح لگ رہا ہے. درحقیقت لائن 22، جہاں ہم نے فائل کو کھولا، اور 39 اوپر، جہاں ہم فائل کو بند کر دیا، دونوں تقریبا typewriter.c جیسی fopen دوسری دلیل کے لئے محفوظ کریں. اس بار ہم ایک فائل سے پڑھ رہے ہو، تو ہم W ر کا انتخاب کیا ہے بجائے. اس طرح، عمل کے دوسرے حصے پر توجہ مرکوز کریں. اوپر 35 میں، ہمارے 4 لوپ میں دوسری شرط کے طور پر، ہم fgets ایک فون کر، ساتھی پہلے سے fputs تقریب. اس وقت ہم نے تین دلائل ہیں. جہاں سٹرنگ محفوظ رکھا جائے گا حروف کی صف پر ہونے والی پہلی پوائنٹر ہے. دوسرے حروف کی زیادہ سے زیادہ تعداد میں پڑھا جائے گا ہے. اور تیسری فائل جس کے ساتھ ہم کام کر رہے ہیں پوائنٹر ہے. آپکو محسوس ہو کہ لوپ کے لئے ختم ہو جاتا ہے جب fgets شہوت انگیز null واپس کریں گے. دو وجہ ہے کہ یہ ہو سکتا ہے ہے. سب سے پہلے، ایک خرابی آگئی ہے کر سکتے ہیں. دوسری، اور زیادہ امکان، فائل کے آخر میں پہنچ گئی اور نہیں حروف کو پڑھا گیا گیا تھا. اگر آپ سوچ رہے دو افعال موجود ہیں، کہ ہمیں بتانے کے لئے کی اجازت جس وجہ سے یہ خاص طور پر لوڈ، اتارنا null پوائنٹر کی وجہ ہے. اور حیرت کی بات نہیں، کیونکہ وہ فائلوں کے ساتھ کام کرنے کے ساتھ کیا کرنا ہے، دونوں ferror خط F کے ساتھ کام اور feof تقریب کا آغاز. آخر میں، اس سے پہلے کہ ہم یہ نتیجہ اخذ، فائل تقریب کے اختتام پر کے بارے میں ایک فوری نوٹ جس، کے طور پر صرف ذکر feof کے طور پر کے وزٹرز کا ریکارڈ رکھا جائے گا ہے. اکثر آپ خود کو جبکہ اور loops کے لئے استعمال کرتے ہوئے آہستہ فائلوں کے ذریعے اپنے راستے کو پڑھنے کے کریں گے. اس طرح، آپ کو ان loops کو ختم کرنے کے لئے راستہ کی ضرورت کے بعد آپ ان فائلوں کے آخر تک پہنچ جائیں گے. آپ کے فائل پوائنٹر پر feof کو کال کر رہا ہے اور اگر یہ سچ ہے کو دیکھنے کے لئے جانچ پڑتال صرف ایسا کریں گے. اس طرح، حالت (feof (FP)!) کے ساتھ تھوڑی دیر کے لوپ ایک بالکل مناسب حل کی طرح لگتا ہے ہو سکتا ہے. تاہم کہنا ہے کہ، ہم ایک ہمارے ٹیکسٹ فائل میں چھوڑ لائن ہے. ہم اپنے جبکہ لوپ میں داخل کریں گے اور سب کچھ کام کے طور پر منصوبہ بندی کی جائے گا. اگلے کے ذریعے دور پر، ہمارے پروگرام اگر FP کی feof سچ ہے کو دیکھنے کے لئے جانچ پڑتال کرے گا، لیکن - اور یہ یہاں کو سمجھنے کے لئے اہم بات یہ ہے - یہ سچ نہیں ابھی تک. ایسا اس لئے ہے کیونکہ feof کا مقصد چیک کرنے کے لیے نہیں ہے اگر پڑھا تقریب کی اگلی کال فائل کے آخر مارا جائے گا، بلکہ چیک کرنے کے لیے یا فائل کے آخر میں نہیں جا چکا ہے پہنچ. اس مثال کی صورت میں، ہماری فائل کی آخری لائن پڑھنے مکمل طور پر ہموار طریقے سے جاتا ہے، لیکن پروگرام ابھی تک کہ ہم نے نے ہماری فائل کے آخر متاثر کیا ہے پتہ نہیں ہے. یہ نہیں ہے جب تک یہ ایک اضافی پڑھیں کرتا ہے کہ یہ فائل کے آخر کاؤنٹر ہے. اس طرح، صحیح حالت میں مندرجہ ذیل ہو گی: fgets اور اس کے تین دلائل - پیداوار، پیداوار کے سائز، اور FP - یہ نہیں کے برابر کے تمام لوڈ، اتارنا null. یہ نقطہ نظر ہم printer.c میں لے لیا ہے، اور اس معاملے میں، لوپ exits کے بعد آپ feof یا ferror اس لوپ باہر نکلنے کے لئے مخصوص استدلال صارف کو مطلع کرنے کے لئے کہہ سکتے ہیں. لکھنے اور ایک فائل سے پڑھنا اس کے سب سے بنیادی ہے، ایک سادہ عمل کا حصہ 3. سب سے پہلے، ہم فائل کو کھولنے. دوسری بات یہ کہ ہم اپنے فائل میں کچھ چیزیں رکھ یا اس میں سے کچھ چیزیں لے. تیسرے، ہم فائل کو بند کرو. پہلا اور آخری حصے میں آسان ہیں. درمیانی حصہ ہے جہاں مشکل چیزیں جھوٹ. اور اگرچہ ہم ہمیشہ ہڈ کے نیچے zeros اور ہیں کی ایک طویل ترتیب کے ساتھ کام کر رہے ہو، مدد جب تجرید کی پرت کو شامل کرنے کی کوڈنگ ہے جو کہ ایک ایسی چیز ہے جس پر زیادہ باریک بینی سے مشابہ ہے جو ہم دیکھ کرنے کے لئے استعمال کر رہے ہیں میں ترتیب دیتا ہے. مثال کے طور پر، اگر ہم ایک 24 بٹ بٹ نقشہ فائل کے ساتھ کام کر رہے ہیں، ہم امکان پڑھ جائے گا یا ایک وقت میں تین بائٹس لکھنے. اس صورت میں، اس کا کوئی مطلب اور مناسب وضاحت نام ایک struct کہ 3 بائٹس بڑی ہے. اگرچہ فائلوں کے ساتھ کام کرنے پیچیدہ لگ سکتا ہے، ان کے استعمال سے ہمیں واقعی قابل ذکر کچھ کرنا کرنے کی اجازت دیتا ہے ہے. ہم ہمارے پروگرام سے باہر دنیا کی حالت کو تبدیل کر سکتے ہیں، ہمیں کچھ ہے جو کہ ہمارے پروگرام کی زندگی سے باہر رہتے ہیں تشکیل دے سکتے ہیں، یا ہم کچھ بھی تبدیل کر سکتے ہیں اس سے پہلے ہمارے پروگرام چل رہا شروع تشکیل دے دیا گیا تھا. فائل کے ساتھ بات چیت سی میں ایک پروگرامنگ کی واقعی طاقتور حصہ ہے اور میں دیکھ کر کیا آپ کو اس کے ساتھ آنے والے کوڈ میں پیدا کرنے جا رہے ہیں کی حوصلہ افزائی کر رہا ہوں. میرا نام Jason Hirschhorn ہے. یہ CS50 ہے. [CS50.TV] [ہنسی] ٹھیک ہے. ایک لو. یہاں ہم چلے. جب ہم ایک فائل کے بارے میں سوچتے ہیں - اوہ >> رکو. معاف کیجئے گا. [ہنسی] ٹھیک ہے. وہاں ہے. ہم ایک فائل کی جب لگتا ہے کہ - جب آپ ایک فائل کے بارے میں سوچتے ہیں - ٹھیک ہے. مجھے بتاو جب تم تیار ہو. اوہ، بہت اچھا. ایک teleprompter سے پڑھنے اگرچہ لگ سکتا ہے - نہیں. میرا برا ہے.