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