1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [بایگانی I / O] 2 00:00:02,000 --> 00:00:04,000 [جیسون Hirschhorn، دانشگاه هاروارد] 3 00:00:04,000 --> 00:00:07,000 [این CS50، CS50.TV] 4 00:00:07,000 --> 00:00:11,000 هنگامی که ما از یک فایل فکر می کنم، آنچه که به ذهن میرسد این است که یک سند ورد مایکروسافت، 5 00:00:11,000 --> 00:00:14,000 یک تصویر JPEG، یا آهنگ MP3، 6 00:00:14,000 --> 00:00:17,000 و ما با هر یک از این نوع فایل ها به روش های مختلف تعامل داشته باشند. 7 00:00:17,000 --> 00:00:20,000 به عنوان مثال، در یک سند Word اضافه کردن متن 8 00:00:20,000 --> 00:00:24,000 در حالی که با یک تصویر JPEG ما ممکن است محصول از لبه ها و یا دستکاری کردن رنگ. 9 00:00:24,000 --> 00:00:28,000 اما در زیر کاپوت همه فایل های موجود در کامپیوتر ما هستند، نه چیزی بیشتر 10 00:00:28,000 --> 00:00:31,000 از یک توالی طولانی از صفر و آنهایی که. 11 00:00:31,000 --> 00:00:33,000 آن را به نرم افزار خاص است که تعامل با فایل 12 00:00:33,000 --> 00:00:38,000 تصمیم می گیرید که چگونه برای پردازش این دنباله ای طولانی و ارائه آن به کاربر است. 13 00:00:38,000 --> 00:00:41,000 از یک طرف، یک سند ممکن است در تنها یک بایت، 14 00:00:41,000 --> 00:00:45,000 یا 8 صفر و آنهایی که، و نشان دادن کاراکتر ASCII بر روی صفحه نمایش است. 15 00:00:45,000 --> 00:00:48,000 از سوی دیگر، یک تصویر بیت مپ در 3 کلمه در ادامه متن نگاه کنید، 16 00:00:48,000 --> 00:00:50,000 و 24 صفر و آنهایی که، 17 00:00:50,000 --> 00:00:53,000 و آنها را تفسیر به 3 عدد هگزادسیمال 18 00:00:53,000 --> 00:00:56,000 که نشان دهنده مقادیر قرمز، سبز، و آبی 19 00:00:56,000 --> 00:00:58,000 در یک پیکسل از یک تصویر. 20 00:00:58,000 --> 00:01:01,000 هر آنچه که آنها ممکن است مانند بر روی صفحه نمایش خود را نگاه کنید، در هسته خود، 21 00:01:01,000 --> 00:01:05,000 فایل ها چیزی بیش از یک دنباله ای از صفر و آنهایی که. 22 00:01:05,000 --> 00:01:08,000 پس بیایید در شیرجه رفتن و نگاه کنید که چگونه ما در واقع دستکاری این صفر و آنهایی که 23 00:01:08,000 --> 00:01:12,000 زمانی که آن را به نوشتن و خواندن از یک فایل می آید. 24 00:01:12,000 --> 00:01:15,000 >> من با شکستن آن را به فرایند ساده 3 قسمت شروع می شود. 25 00:01:15,000 --> 00:01:19,000 بعد، من به دو نمونه کد است که نشان می دهد که این سه بخش شیرجه رفتن. 26 00:01:19,000 --> 00:01:23,000 در نهایت، من این فرایند و بررسی برخی از مهم ترین جزئیات. 27 00:01:23,000 --> 00:01:25,000 همانطور که با هر فایل است که نشسته است بر روی دسکتاپ شما، 28 00:01:25,000 --> 00:01:28,000 اولین چیزی که برای انجام شده است، آن را باز کنید. 29 00:01:28,000 --> 00:01:31,000 در C ما این کار را با اعلام یک اشاره گر به یک ساختار از پیش تعریف شده 30 00:01:31,000 --> 00:01:33,000 که نشان دهنده یک فایل بر روی دیسک. 31 00:01:33,000 --> 00:01:38,460 در این فراخوانی تابع، ما نیز تصمیم می گیرید که آیا ما می خواهیم برای نوشتن و یا خواندن از فایل. 32 00:01:38,460 --> 00:01:41,660 بعد، ما خواندن و نوشتن واقعی است. 33 00:01:41,660 --> 00:01:44,800 تعدادی از توابع های تخصصی وجود دارد ما می توانیم در این بخش استفاده کنید، 34 00:01:44,800 --> 00:01:48,790 و تقریبا همه آنها با حرف F، که مخفف فایل شروع می شود. 35 00:01:48,790 --> 00:01:53,560 گذشته، شبیه به X قرمز رنگ کوچک در گوشه بالا از فایل ها بر روی کامپیوتر خود را باز کنید، 36 00:01:53,560 --> 00:01:56,680 فایل نزدیک ما با فراخوانی تابع نهایی است. 37 00:01:56,680 --> 00:01:59,540 در حال حاضر که در حال حاضر یک ایده کلی از آنچه که ما قصد انجام، 38 00:01:59,540 --> 00:02:02,000 اجازه فرو رفتن به کد. 39 00:02:02,000 --> 00:02:06,100 >> در این شاخه، ما باید دو فایل C و فایل های اجرایی مربوط به خود را. 40 00:02:06,100 --> 00:02:09,710 برنامه ماشین تحریر طول می کشد یک آرگومان خط فرمان، 41 00:02:09,710 --> 00:02:12,060 نام سند ما می خواهیم برای ایجاد. 42 00:02:12,060 --> 00:02:16,160 در این مورد، ما تماس بگیرید آن doc.txt است. 43 00:02:16,160 --> 00:02:19,080 اجازه اجرای برنامه و وارد شدن به یک زن و شوهر از خطوط. 44 00:02:19,080 --> 00:02:23,660 سلام. اسم من جیسون است. 45 00:02:23,660 --> 00:02:26,710 در نهایت، خواهیم نوع "را ترک کنید." 46 00:02:26,710 --> 00:02:29,720 اگر ما در حال حاضر تمام فایل ها را در لیست این شاخه 47 00:02:29,720 --> 00:02:33,770 ما می بینیم که یک سند جدید وجود دارد به نام doc.txt. 48 00:02:34,190 --> 00:02:36,110 است که فایل این برنامه ایجاد شده است. 49 00:02:36,110 --> 00:02:40,520 و البته، آن را بیش از حد به چیزی بیش از یک توالی طولانی از صفر و آنهایی که است. 50 00:02:41,100 --> 00:02:43,260 اگر ما برای باز کردن این فایل جدید، 51 00:02:43,260 --> 00:02:45,870 ما می بینیم از 3 خط کد به برنامه وارد - 52 00:02:46,060 --> 00:02:49,060 سلام. نام ممکن است در جیسون است. 53 00:02:49,580 --> 00:02:52,090 اما آنچه در واقع در زمانی که typewriter.c اجرا می شود؟ 54 00:02:52,810 --> 00:02:55,520 خط 24 خط اول برای ما جالب است. 55 00:02:55,560 --> 00:02:58,490 در این خط، اشاره گر فایل ما اعلام شده است. 56 00:02:59,080 --> 00:03:03,140 تابع برمی گرداند که این اشاره گر، fopen، دو آرگومان است. 57 00:03:03,140 --> 00:03:07,440 نام فایل فرمت فایل ها در صورت مناسب است. 58 00:03:07,440 --> 00:03:10,980 به یاد بیاورید که پسوند فایل را در پایین ترین سطح آن را تحت تاثیر قرار نمی. 59 00:03:10,980 --> 00:03:14,640 ما همیشه با دنباله ای طولانی از صفر و آنهایی که خرید و فروش می کند. 60 00:03:14,640 --> 00:03:19,630 اما آن را نشانی از نفوذ چگونه فایل ها را تفسیر و برنامه های کاربردی استفاده می شوند آنها را باز کنید. 61 00:03:19,630 --> 00:03:22,290 آرگومان دوم به fopen تنها یک حرف است 62 00:03:22,290 --> 00:03:25,300 که مخفف چیزی است که ما برنامه ریزی برای انجام این کار بعد از باز کردن فایل. 63 00:03:25,300 --> 00:03:30,630 سه گزینه برای این استدلال وجود دارد - W، R، و A. 64 00:03:30,630 --> 00:03:34,900 ما W در این مورد انتخاب شده چرا که ما می خواهیم برای نوشتن به فایل. 65 00:03:34,900 --> 00:03:38,820 R، همانطور که شما احتمالا می توانید حدس بزنید، این است که برای خواندن فایل. 66 00:03:38,820 --> 00:03:41,760 و برای الحاق به فایل. 67 00:03:41,760 --> 00:03:44,960 در حالی که هر دو W و ممکن است برای نوشتن به فایل استفاده می شود، 68 00:03:44,960 --> 00:03:47,460 W شروع به نوشتن از همان ابتدا از فایل 69 00:03:47,460 --> 00:03:50,810 و به طور بالقوه هر گونه اطلاعات که قبلا ذخیره شده را بازنویسی کند. 70 00:03:50,810 --> 00:03:54,070 به طور پیش فرض، فایل را باز کنید، اگر آن را در حال حاضر وجود ندارد، 71 00:03:54,070 --> 00:03:57,180 در حال حاضر ما در پوشه کار می کند ایجاد می شود. 72 00:03:57,180 --> 00:04:00,540 با این حال، اگر ما می خواهیم برای دسترسی و یا ایجاد یک فایل در مکان های مختلف، 73 00:04:00,540 --> 00:04:02,650 در اولین آرگومان fopen، 74 00:04:02,650 --> 00:04:05,840 ما ممکن است مسیر فایل را در علاوه بر نام فایل را مشخص کنید. 75 00:04:05,840 --> 00:04:09,490 در حالی که برای اولین بار از این فرآیند تنها یک خط از کد طولانی مدت است، 76 00:04:09,490 --> 00:04:12,350 آن را همیشه تمرین خوبی برای یکی دیگر از مجموعه ای از خطوط 77 00:04:12,350 --> 00:04:15,930 که بررسی کنید تا اطمینان حاصل شود که فایل با موفقیت افتتاح شد و یا ایجاد شده است. 78 00:04:15,930 --> 00:04:20,300 اگر fopen تهی می گرداند، ما نمی خواهم برای ایجاد پیش با برنامه های ما، 79 00:04:20,300 --> 00:04:23,270 و این اتفاق ممکن است در صورتی که سیستم عامل از حافظه 80 00:04:23,270 --> 00:04:27,940 و یا اگر ما سعی می کنید برای باز کردن یک فایل در یک دایرکتوری که ما مجوز ندارند. 81 00:04:27,940 --> 00:04:31,780 >> قسمت دو از فرایند طول می کشد در حالی که حلقه ماشین تحریر است. 82 00:04:31,780 --> 00:04:35,000 ما با استفاده از تابع کتابخانه CS50 برای دریافت ورودی از کاربر، 83 00:04:35,000 --> 00:04:37,190 و با فرض آنها نمی خواهند به ترک برنامه، 84 00:04:37,190 --> 00:04:41,940 ما با استفاده از تابع fputs را به رشته و نوشتن آن را به فایل. 85 00:04:41,940 --> 00:04:46,700 fputs تنها یکی از بسیاری از توابع، ما می توانیم با استفاده از به نوشتن در فایل است. 86 00:04:46,700 --> 00:04:51,920 دیگر شامل fwrite، fputc، و حتی fprintf. 87 00:04:51,920 --> 00:04:54,840 صرف نظر از عملکرد خاص ما تا پایان با استفاده از، هر چند، 88 00:04:54,840 --> 00:04:57,480 همه آنها نیاز به دانستن، از طریق استدلال خود را، 89 00:04:57,480 --> 00:04:59,670 حداقل دو چیز - 90 00:04:59,670 --> 00:05:03,140 آنچه باید نوشته شده و جایی که آن را باید به نوشته شده است. 91 00:05:03,140 --> 00:05:07,240 در مورد ما، ورودی رشته ای است که نیاز به نوشته 92 00:05:07,240 --> 00:05:11,290 و FP اشاره گر است که ما را به جایی که ما در حال نوشتن است. 93 00:05:11,290 --> 00:05:15,330 در این برنامه، دو بخش از این فرایند است و نه سر راست است. 94 00:05:15,330 --> 00:05:17,360 ما در حال به سادگی با گرفتن یک رشته از کاربر 95 00:05:17,360 --> 00:05:22,120 و آن را با اضافه کردن به طور مستقیم به فایل ما با کمی به هیچ اعتبار سنجی ورودی و یا چک های امنیتی است. 96 00:05:22,120 --> 00:05:26,160 اغلب، با این حال، دو بخش خواهد شد تا بخش عمده ای از کد شما. 97 00:05:26,160 --> 00:05:30,580 در نهایت، بخش سوم است که در خط 58، که در آن فایل به ما نزدیک است. 98 00:05:30,580 --> 00:05:34,860 در اینجا ما می خواهیم fclose و با تصویب آن اشاره گر فایل اصلی ما است. 99 00:05:34,860 --> 00:05:39,500 در خط بعدی ما بازگشت صفر، سیگنالینگ پایان از برنامه های ما است. 100 00:05:39,500 --> 00:05:42,630 و بله، بخش سوم را به عنوان ساده به عنوان آن است. 101 00:05:42,630 --> 00:05:45,260 >> اجازه دهید برای خواندن از فایل. 102 00:05:45,260 --> 00:05:48,220 در دایرکتوری ما، ما باید یک فایل به نام printer.c. 103 00:05:48,220 --> 00:05:50,910 اجازه دهید آن را اجرا کنید با فایل ما فقط ایجاد - 104 00:05:50,910 --> 00:05:53,350 doc.txt. 105 00:05:53,350 --> 00:05:58,150 این برنامه به عنوان نام نشان می دهد، به سادگی از چاپ محتویات فایل به آن منتقل می شود. 106 00:05:58,150 --> 00:06:00,230 و در آنجا ما آن را داشته باشد. 107 00:06:00,230 --> 00:06:03,780 خط از کد ما قبلا تایپ شده بود و ذخیره شده در doc.txt. 108 00:06:03,780 --> 00:06:06,980 سلام. اسم من جیسون است. 109 00:06:06,980 --> 00:06:09,120 اگر ما به printer.c شیرجه، 110 00:06:09,120 --> 00:06:13,570 ما می بینیم که بسیاری از کد به نظر می رسد شبیه به چیزی است که ما فقط از طریق در typewriter.c راه می رفت. 111 00:06:13,570 --> 00:06:16,720 در واقع خط 22، که در آن ما فایل را باز کرد، 112 00:06:16,720 --> 00:06:19,220 و خط 39، که در آن ما فایل را بسته، 113 00:06:19,220 --> 00:06:23,890 هر دو تقریبا یکسان به typewriter.c، برای بحث fopen دوم نجات دهد. 114 00:06:23,890 --> 00:06:26,510 این بار ما در حال خواندن از یک فایل، 115 00:06:26,510 --> 00:06:29,040 بنابراین ما را انتخاب کرده اند R به جای W. 116 00:06:29,040 --> 00:06:31,950 بنابراین، اجازه تمرکز بر روی بخش دوم از روند. 117 00:06:31,950 --> 00:06:36,060 در خط 35، به عنوان شرط دوم در 4 حلقه ما، 118 00:06:36,060 --> 00:06:38,590 ما با یک تماس به fgets، 119 00:06:38,590 --> 00:06:42,190 تابع همراه fputs از قبل است. 120 00:06:42,190 --> 00:06:44,660 در این زمان ما باید سه آرگومان. 121 00:06:44,660 --> 00:06:48,810 اشاره گر به آرایه ای از کاراکتر که در آن رشته خواهد شد ذخیره می شود. 122 00:06:48,810 --> 00:06:52,670 دوم حداکثر تعداد کاراکتر ها به خواندن است. 123 00:06:52,670 --> 00:06:56,010 و سوم اشاره گر به فایل که ما با آن در حال کار است. 124 00:06:56,010 --> 00:07:00,780 شما متوجه خواهید شد که برای حلقه به پایان می رسد وقتی که fgets تهی می گرداند. 125 00:07:00,780 --> 00:07:02,940 دو دلیل وجود دارد که ممکن است این اتفاق افتاده است. 126 00:07:02,940 --> 00:07:05,380 اول، خطا ممکن است رخ داده است. 127 00:07:05,380 --> 00:07:10,740 دوم، و به احتمال زیاد، به انتهای فایل رسیده و نه بیشتر شخصیت های خوانده شدند. 128 00:07:10,740 --> 00:07:14,040 در صورتی که شما نگرانم، دو تابع وجود دارد که به ما اجازه می دهد برای گفتن 129 00:07:14,040 --> 00:07:17,160 که دلیل علت خاص برای این اشاره گر تهی است. 130 00:07:17,160 --> 00:07:21,090 و جای تعجب نیست، چرا که آنها باید با کار با فایل های انجام دهد، 131 00:07:21,090 --> 00:07:26,940 هر دو تابع ferror و feof تابع شروع با حرف f. 132 00:07:26,940 --> 00:07:32,130 >> در نهایت، قبل از اینکه ما نتیجه گیری، یکی از سریع توجه داشته باشید در مورد پایان از عملکرد فایل، 133 00:07:32,130 --> 00:07:36,690 که فقط به عنوان ذکر شد، به عنوان feof نوشته شده است. 134 00:07:36,690 --> 00:07:41,550 اغلب اوقات شما خود را با استفاده از و در حالی که حلقه به تدریج راه خود را از طریق فایل، خواندن پیدا کنید. 135 00:07:41,550 --> 00:07:45,790 بنابراین، شما یک راه برای پایان دادن به این حلقه پس از رسیدن به انتهای این فایل ها به شما نیاز دارند. 136 00:07:45,790 --> 00:07:50,510 تلفن feof در اشاره گر فایل شما و چک تا ببینید که اگر آن را درست 137 00:07:50,510 --> 00:07:52,310 انجام درست آن. 138 00:07:52,310 --> 00:07:59,820 بنابراین، در حالی که یک حلقه با شرط (! feof (FP)) ممکن است مانند یک راه حل کاملا مناسب به نظر می رسد. 139 00:07:59,820 --> 00:08:03,770 با این حال، می گویند ما یک خط در سمت چپ در فایل متنی ما. 140 00:08:03,770 --> 00:08:07,130 ما می خواهیم در حالی که حلقه خود را وارد کنید و همه چیز کار خواهد کرد را به عنوان برنامه ریزی شده. 141 00:08:07,130 --> 00:08:12,750 در دور بعدی از طریق برنامه های ما را چک کنید و ببینید اگر feof از FP درست است، 142 00:08:12,750 --> 00:08:15,430 اما - و این نقطه بسیار مهم است که به درک - 143 00:08:15,430 --> 00:08:17,770 آن را نمی خواهد درست باشد درست نشده است. 144 00:08:17,770 --> 00:08:21,110 دلیلش این است که هدف از feof است برای بررسی 145 00:08:21,110 --> 00:08:24,400 در صورتی که تماس بعدی به یک تابع خواندن از فایل ضربه، 146 00:08:24,400 --> 00:08:28,190 بلکه به بررسی اینکه آیا یا نه انتهای فایل رسیده است در حال حاضر شده است. 147 00:08:28,190 --> 00:08:30,140 در مورد این مثال، 148 00:08:30,140 --> 00:08:32,780 خواندن آخرین خط از فایل های ما می رود کاملا هموار، 149 00:08:32,780 --> 00:08:36,210 اما این برنامه هنوز نمی دانند که ما ضربه پایان از فایل های ما. 150 00:08:36,210 --> 00:08:40,549 تا آن که یکی به عنوان خوانده شده اضافی نیست که آن را در مقابل انتهای فایل. 151 00:08:40,549 --> 00:08:43,210 بنابراین، شرط صحیح خواهد بود به شرح زیر است: 152 00:08:43,210 --> 00:08:49,330 fgets و سه آرگومان - خروجی، اندازه خروجی، و FP - 153 00:08:49,330 --> 00:08:52,570 و همه از آن برابر نیست به تهی. 154 00:08:52,570 --> 00:08:55,260 این رویکرد ما در printer.c زمان است، 155 00:08:55,260 --> 00:08:57,890 و در این مورد، پس از خروج حلقه، 156 00:08:57,890 --> 00:09:04,290 شما می توانید تماس بگیرید feof یا ferror اطلاع کاربر به عنوان استدلال خاصی برای خروج از این حلقه است. 157 00:09:04,290 --> 00:09:08,100 >> نوشتن به و خواندن از یک فایل است، در آن یکی از اساسی ترین، 158 00:09:08,100 --> 00:09:10,150 فرایند ساده 3 بخش است. 159 00:09:10,150 --> 00:09:12,530 اول، ما برای باز کردن فایل. 160 00:09:12,530 --> 00:09:16,740 دوم، ما بعضی چیز ها را به فایل ما قرار داده است و یا بعضی چیز ها را خارج از آن. 161 00:09:16,740 --> 00:09:19,200 سوم، فایل های ما نزدیک است. 162 00:09:19,200 --> 00:09:21,170 بخش اول و آخر بسیار آسان است. 163 00:09:21,170 --> 00:09:23,920 بخش میانی است که در آن مسائل پیچیده نهفته است. 164 00:09:23,920 --> 00:09:27,760 و هر چند در قسمت پایین هود ما همیشه با دنباله ای طولانی از صفر و آنهایی که خرید و فروش، 165 00:09:27,760 --> 00:09:30,710 آن را نشانی از زمانی که برنامه نویسی برای اضافه کردن یک لایه از انتزاع 166 00:09:30,710 --> 00:09:35,350 که باعث چرخش دنباله را به چیزی که بیشتر شبیه چیزی است که ما به دیدن استفاده می شود. 167 00:09:35,350 --> 00:09:39,570 به عنوان مثال، اگر ما در حال کار با یک فایل بیت مپ 24 بیتی، 168 00:09:39,570 --> 00:09:43,290 ما به احتمال زیاد خواندن و یا نوشتن سه کلمه در ادامه متن در یک زمان است. 169 00:09:43,290 --> 00:09:46,450 که در این صورت، آن را حس می کند به تعریف و مناسب را نام 170 00:09:46,450 --> 00:09:48,980 یک ساختار است که 3 بایت بزرگ است. 171 00:09:48,980 --> 00:09:51,410 >> گرچه کار با فایل های پیچیده، ممکن است به نظر می رسد 172 00:09:51,410 --> 00:09:54,530 استفاده از آنها را اجازه می دهد تا ما را به انجام کاری واقعا قابل توجه است. 173 00:09:54,530 --> 00:09:58,880 ما می توانیم دولت را از جهان خارج از برنامه ما تغییر 174 00:09:58,880 --> 00:10:01,730 ما می تواند چیزی است که فراتر از زندگی از برنامه های ما زندگی می کند، 175 00:10:01,730 --> 00:10:07,190 ما حتی می تواند چیزی است که قبل از برنامه ما در حال اجرا ساخته شده است را تغییر دهید. 176 00:10:07,190 --> 00:10:11,210 تعامل با فایل های واقعا قدرتمند در بخشی از برنامه نویسی C. 177 00:10:11,210 --> 00:10:15,300 و من هیجان زده برای دیدن آنچه که قصد دارید با آن ایجاد کنید در کد آمده است. 178 00:10:15,300 --> 00:10:19,770 اسم من جیسون Hirschhorn است. این CS50 است. 179 00:10:19,770 --> 00:10:21,770 [CS50.TV] 180 00:10:21,770 --> 00:10:25,940 >> [خنده] 181 00:10:25,940 --> 00:10:29,330 باشه. یکی کنند. در اینجا ما بروید. 182 00:10:49,000 --> 00:10:52,140 هنگامی که ما از یک فایل فکر می کنم - >> اوه، صبر کنید. متأسفم. 183 00:10:52,140 --> 00:10:56,800 [خنده] خوب. 184 00:11:06,620 --> 00:11:09,970 با سلام وجود دارد. 185 00:11:13,670 --> 00:11:16,310 هنگامی که ما از یک فایل فکر می کنم - 186 00:11:17,610 --> 00:11:20,710 هنگامی که شما از یک فایل فکر می کنم - خوب. به من بگو وقتی که شما آماده شود. 187 00:11:20,710 --> 00:11:22,520 اوه، بزرگ است. 188 00:11:22,520 --> 00:11:26,180 هر چند خواندن از اسباب مخصوص چرخاندن خطوط نوشته در جلو ناطق تلویزیون ممکن است به نظر می رسد - نه. بد من است.