1 00:00:00,000 --> 00:00:09,780 >> [MUSIC پخش] 2 00:00:09,780 --> 00:00:11,150 >> ZAMYLA CHAN: بیایید مقابله بهبود می یابند. 3 00:00:11,150 --> 00:00:14,030 بازیابی احتمالا PSET مورد علاقه من، و عمدتا به دلیل من فکر می کنم آن را 4 00:00:14,030 --> 00:00:15,650 واقعا، واقعا سرد. 5 00:00:15,650 --> 00:00:19,040 در واقع، شما یک حافظه داده شده است در حال فایل کارت است که در آن 6 00:00:19,040 --> 00:00:20,900 تصاویر حذف شده. 7 00:00:20,900 --> 00:00:23,650 اما آنچه شما به انجام شده است بهبود می یابند همه آنها را. 8 00:00:23,650 --> 00:00:24,250 >> OK. 9 00:00:24,250 --> 00:00:28,230 پس از آن واقعا هیجان انگیز است، اما شاید کمی تهدید آمیز است، چون تو 10 00:00:28,230 --> 00:00:32,430 با توجه به یک فایل خالی C و شما باید آن را وارد را پر کنید 11 00:00:32,430 --> 00:00:36,250 OK، بنابراین اجازه دهید این شکستن به بخش های قابل مدیریت. 12 00:00:36,250 --> 00:00:38,160 شما می خواهید برای باز کردن فایل کارت حافظه است. 13 00:00:38,160 --> 00:00:39,900 که به اندازه کافی ساده به نظر می رسد. 14 00:00:39,900 --> 00:00:43,030 سپس، پیدا کردن ابتدا از یک تصویر JPG. 15 00:00:43,030 --> 00:00:46,740 تمام فایل ها بر روی این حافظه کارت رفتن به JPGs. 16 00:00:46,740 --> 00:00:50,840 سپس، هنگامی که شما در پیدا کردن آغاز، شما به باز کردن یک JPG جدید، که 17 00:00:50,840 --> 00:00:57,610 است، مانند، ایجاد یک JPG، و ارسال 512 بایت در یک زمان تا زمانی که JPG جدید است 18 00:00:57,610 --> 00:01:02,930 یافت، و پایان دادن به این برنامه، یک بار شما در پایان فایل را تشخیص دهد. 19 00:01:02,930 --> 00:01:06,400 >> مراحل پس اول اول برای باز کردن فایل کارت حافظه است. 20 00:01:06,400 --> 00:01:09,850 اما می دانید در حال حاضر، و وجود دارد یک فایل عملکرد I / O که رفتن به 21 00:01:09,850 --> 00:01:12,030 ثابت بسیار مفید است. 22 00:01:12,030 --> 00:01:12,820 OK. 23 00:01:12,820 --> 00:01:14,760 پس چه JPGs است؟ 24 00:01:14,760 --> 00:01:16,330 از آنجا که ما به شروع به آن نیاز دارید. 25 00:01:16,330 --> 00:01:21,310 خوب، JPGs، درست مثل نقشه بیتی، فقط دنباله ای از بایت ها می باشد. 26 00:01:21,310 --> 00:01:30,660 خوشبختانه، هر JPG با هر دو شروع می شود 0XFF، 0xd8، 0XFF، 0xe0، یک دنباله 27 00:01:30,660 --> 00:01:33,610 از بایت، و یا دیگر دنباله ای از بایت. 28 00:01:33,610 --> 00:01:37,250 >> پس آن چهار کلمه در ادامه متن نشان می دهد شروع یک JPG. 29 00:01:37,250 --> 00:01:40,780 هیچ یک دیگر از آن دو ترکیب از چهار بایت. 30 00:01:40,780 --> 00:01:44,840 و خوشبختانه برای ما، حقیقت دیگری است که ما می توانید از امکان استفاده این است که هر 31 00:01:44,840 --> 00:01:48,550 JPG ذخیره شده است جانبی توسط سمت در کارت حافظه. 32 00:01:48,550 --> 00:01:52,210 I ساختار نشان داده ام کارت حافظه شماتیک در این 33 00:01:52,210 --> 00:01:53,310 اسلاید اینجا. 34 00:01:53,310 --> 00:01:59,270 در اینجا، هر مربع، هر مستطیل، نشان دهنده 512 بایت، و آن شروع می شود 35 00:01:59,270 --> 00:02:01,750 با خاکستری که ما نمی واقعا JPG داشته باشد. 36 00:02:01,750 --> 00:02:05,700 >> اما پس از آن ما در نهایت ضربه یک بلوک با یک ستاره. 37 00:02:05,700 --> 00:02:10,940 این بدان معنی است که چهار بایت اول از از این 512 در یکی از این دو 38 00:02:10,940 --> 00:02:13,230 با شروع سلسله ای از JPG. 39 00:02:13,230 --> 00:02:17,340 و ما را از وجود دارد، و پس از آن یک بار یکی از JPG به پایان می رسد، یک بعدی شروع می شود. 40 00:02:17,340 --> 00:02:20,990 ما هرگز بیشتر دارند فضای خاکستری در میان. 41 00:02:20,990 --> 00:02:25,550 >> اما چگونه ما در واقع به عنوان خوانده شده این، و خواندن 512 کلمه در ادامه متن به طوری که ما می توانیم 42 00:02:25,550 --> 00:02:27,500 مقایسه وهله اول؟ 43 00:02:27,500 --> 00:02:33,470 خوب، اجازه بازگشت به از fread، که طول می کشد در ساختار که شامل خواهد شد 44 00:02:33,470 --> 00:02:34,470 کلمه در ادامه متن است که شما در حال خواندن. 45 00:02:34,470 --> 00:02:36,570 بنابراین شما به قرار کسانی که در آن وجود دارد - 46 00:02:36,570 --> 00:02:42,192 اندازه، تعداد، و پس از آن inpointer که شما را از خواندن. 47 00:02:42,192 --> 00:02:49,900 در حال حاضر، ما می خواهیم به عنوان خوانده شده 512 در یک زمان، و ما می خواهیم برای ذخیره این در یک بافر، 48 00:02:49,900 --> 00:02:50,700 من قصد دارم به آن تماس بگیرید. 49 00:02:50,700 --> 00:02:54,100 >> در واقع، ما قصد داریم به نگه بر روی آن 512 بایت و انجام 50 00:02:54,100 --> 00:02:55,500 همه چیز با آن، درست است؟ 51 00:02:55,500 --> 00:02:58,260 ما هر دو در حال رفتن به مقایسه اول چهار بایت، و یا ما قصد داریم به 52 00:02:58,260 --> 00:02:59,830 خواندن آن را در، OK؟ 53 00:02:59,830 --> 00:03:05,050 پس اشاره گر داده خواهد شد و سپس به عنوان بافر خود را، و 54 00:03:05,050 --> 00:03:07,745 inpointer، خوب، که فقط رفتن به کارت حافظه خود. 55 00:03:07,745 --> 00:03:09,500 >> برگشت به طرح کلی کارت حافظه است. 56 00:03:09,500 --> 00:03:14,690 ما قصد داریم به عنوان خوانده شده 512 بایت در یک زمان، ذخیره هر بلوک 512 بایت 57 00:03:14,690 --> 00:03:19,190 به یک بافر، برگزاری بر روی آن بافر، آن 512 بایت، تا زمانی که ما می دانیم 58 00:03:19,190 --> 00:03:22,000 دقیقا همان چیزی است که آنها را انجام دهد. 59 00:03:22,000 --> 00:03:25,960 پس از شروع هر چیزی نیست، بنابراین ما از بافر به خواندن، مقایسه آن، و 60 00:03:25,960 --> 00:03:28,160 ما نمی خواهد نیاز به انجام هر کاری با آن. 61 00:03:28,160 --> 00:03:32,030 و پس از آن، ما در نهایت به یک ستاره مسدود کردن، به این معنی که ما 62 00:03:32,030 --> 00:03:33,630 اولین JPG ما در بر داشت. 63 00:03:33,630 --> 00:03:36,560 بنابراین بافر اکنون دارند از آن JPG کلمه در ادامه متن. 64 00:03:36,560 --> 00:03:40,220 >> دفعه بعد 512 بایت، زیرا آنها یک قطعه ستاره، نیز می باشد 65 00:03:40,220 --> 00:03:41,740 بخشی از آن JPG. 66 00:03:41,740 --> 00:03:47,630 و JPGs مداوم از وجود دارد در در، تا زمانی که ما به JPG بعدی. 67 00:03:47,630 --> 00:03:51,880 و پس از آن بافر و سپس نگه می دارد 512 بایت که برای JPG، و 68 00:03:51,880 --> 00:03:53,580 به همین ترتیب، و غیره. 69 00:03:53,580 --> 00:03:54,250 OK. 70 00:03:54,250 --> 00:03:58,980 >> بنابراین زمانی که روی اولین ستاره دار بلوک، اولین JPG، چگونه شما انجام دهد 71 00:03:58,980 --> 00:04:01,910 در واقع، به خوبی، آن را باز کنید؟ 72 00:04:01,910 --> 00:04:04,990 بیایید یک JPG جدید. 73 00:04:04,990 --> 00:04:08,846 نام فایل برای JPG در حال رفتن به در قالب است، شماره، شماره، 74 00:04:08,846 --> 00:04:13,830 number.jpg، در که آنها در به نام نظم که در آن هستند در بر داشت، 75 00:04:13,830 --> 00:04:14,780 با شروع از 0. 76 00:04:14,780 --> 00:04:19,890 >> بنابراین JPG برای اولین بار شما است که پیدا کردن 000.jpg خواهد شد. 77 00:04:19,890 --> 00:04:26,560 بنابراین، احتمالا ایده خوبی برای پیگیری که چگونه بسیاری از JPGs شما تا کنون در بر داشت. 78 00:04:26,560 --> 00:04:27,610 به طوری که نام فایل است. 79 00:04:27,610 --> 00:04:29,660 اما چگونه می توانم در واقع شما را که؟ 80 00:04:29,660 --> 00:04:34,310 خوب، ما قصد داریم به استفاده از تابع sprintf. 81 00:04:34,310 --> 00:04:38,260 کمی شبیه به چون printf، که در آن شما می توانید متغیرهایی برای رشته ها استفاده کنید، 82 00:04:38,260 --> 00:04:42,420 به جز در این مورد، sprintf چاپ فایل را به جریان 83 00:04:42,420 --> 00:04:45,550 دایرکتوری، نه به ترمینال. 84 00:04:45,550 --> 00:04:46,120 >> OK. 85 00:04:46,120 --> 00:04:49,950 بنابراین در اینجا ما می بینیم که ما باید عنوان، یک آرایه کاراکتر است که ذخیره 86 00:04:49,950 --> 00:04:55,120 رشته برآیند، و ما در عبور عنوان رشته واقعی با 87 00:04:55,120 --> 00:04:58,720 مکان نگه دار، فقط ما دوست داریم ام یاد گرفتم که با چون printf. 88 00:04:58,720 --> 00:05:05,530 اما این کدی که من در اینجا خواهد 2.JPG، نه 002.JPG دهد. 89 00:05:05,530 --> 00:05:09,920 پس من به شما می رود برای پیدا کردن چگونه به تغییر مکان نگه دار تا 90 00:05:09,920 --> 00:05:11,920 نام درست. 91 00:05:11,920 --> 00:05:12,610 >> OK. 92 00:05:12,610 --> 00:05:17,390 بنابراین هنگامی که شما پس از آن sprintf'd ام که شما می توانید باز کردن آن فایل، به این دلیل که وجود دارد در 93 00:05:17,390 --> 00:05:22,690 دایرکتوری خود را، با fopen، با استفاده از عنوان، و پس از آن هر حالت شما می خواهید 94 00:05:22,690 --> 00:05:25,140 برای باز کردن آن فایل شوید 95 00:05:25,140 --> 00:05:30,260 بنابراین در حال حاضر که ما یک فایل JPG جدید باز کرده ام، در حال حاضر ما می تواند 512 بایت در یک ارسال 96 00:05:30,260 --> 00:05:33,320 زمان، تا زمانی که JPG جدید پیدا شده است. 97 00:05:33,320 --> 00:05:36,640 بنابراین اجازه دهید نگاهی دیگر نگاه در نحو از fwrite. 98 00:05:36,640 --> 00:05:40,060 >> من می دانم که من نشان دادن این اسلاید زیادی است، اما من فقط می خواهم مطمئن شوید که 99 00:05:40,060 --> 00:05:43,530 شما بچه ها می کنید بیش از حد اشتباه گرفته، چرا که من می دانم که آن را بسیار آسان به 100 00:05:43,530 --> 00:05:47,000 مخلوط کردن اولین و آخرین بحث، به طور خاص. 101 00:05:47,000 --> 00:05:54,390 اما به یاد داشته باشید که شما را از نوشتن بافر خود را به فایل از. 102 00:05:54,390 --> 00:05:59,250 >> حالا که شما می دانید که چگونه نوشتن 512 کلمه در ادامه متن را به فایل JPG خود را که شما 103 00:05:59,250 --> 00:06:03,230 ایجاد، خوب، ما می خواهیم برای متوقف کردن آن پروسه زمانی که ما از پایان رسیده ام 104 00:06:03,230 --> 00:06:06,720 کارت های ما، به دلیل وجود نخواهد داشت هر گونه تصاویر بیشتر یافت می شود. 105 00:06:06,720 --> 00:06:10,760 بنابراین اجازه دهید به عقب برویم به از fread یک بار دیگر، قول می دهم. 106 00:06:10,760 --> 00:06:15,600 از fread می گرداند مورد که چگونه بسیاری از اندازه، اندازه، آماده در موفقیت بود. 107 00:06:15,600 --> 00:06:19,440 در حالت ایده آل، این است که برای رفتن به هر عبور شما را در تعداد، درست است؟ 108 00:06:19,440 --> 00:06:24,140 از آنجا که شما در حال تلاش برای به عنوان خوانده شده تعداد از عناصر از اندازه، اندازه. 109 00:06:24,140 --> 00:06:29,380 اما اگر از fread است قادر به خواندن که نه تعداد عناصر، سپس آن را بازگشت 110 00:06:29,380 --> 00:06:32,530 هر چه تعداد آن را بخوانید با موفقیت. 111 00:06:32,530 --> 00:06:36,310 >> در حال حاضر، یک چیز مهم است به یاد داشته باشید که اگر شما استفاده از یک فایل دیگر I / O 112 00:06:36,310 --> 00:06:43,860 تابع مانند fgetc، آن را نیز بر می گردیم چگونه بسیاری از موارد آن را با موفقیت به عنوان خوانده شده. 113 00:06:43,860 --> 00:06:48,000 چه در مورد این تابع مفید است که اگر شما استفاده از توابع درون یک 114 00:06:48,000 --> 00:06:53,190 شرایط، آن را خود به خود در حالی که اجرا تعیین کننده است که شرایط است که 115 00:06:53,190 --> 00:06:54,340 فقط واقعا مفید است. 116 00:06:54,340 --> 00:07:00,440 بنابراین اگر شما در این شرایط، می گویند، اگر بافر از fread، DOG sizeof، 2، 117 00:07:00,440 --> 00:07:04,870 اشاره گر، برابر است با مقدار 1 است که بدان معنی است که من می خواهم به عنوان خوانده شده 118 00:07:04,870 --> 00:07:06,540 2 سگ در آن زمان. 119 00:07:06,540 --> 00:07:13,490 اما اگر از fread می گرداند 1 به جای 2 انتظار می رود، که بدان معنی است که 2 وجود دارد 120 00:07:13,490 --> 00:07:16,480 سگ در فایل سمت چپ من، اما نه 1. 121 00:07:16,480 --> 00:07:22,450 اما اگر آن را می گرداند 2، پس من هنوز هم کسانی که 2 سگ در داخل بافر من. 122 00:07:22,450 --> 00:07:26,280 >> بنابراین در حال حاضر است که به شما احساس چگونه به برای پایان فایل را بررسی کنید، اما 123 00:07:26,280 --> 00:07:28,940 اجازه دهید از هم اکنون منطق بروید. 124 00:07:28,940 --> 00:07:32,460 چگونه ما در واقع قطعه تمام از این عناصر با هم؟ 125 00:07:32,460 --> 00:07:36,880 هنگامی که ما به اولین JPG ما، از ما می دانیم که JPGs ذخیره می شوند 126 00:07:36,880 --> 00:07:40,910 contiguously، ما خواهید بود تا نوشتن ما به انتهای فایل کارت. 127 00:07:40,910 --> 00:07:43,950 اما ما نمی خواهیم به ارسال هر چیزی که تا آن زمان. 128 00:07:43,950 --> 00:07:48,710 پس از آن اهمیت دارد، نه تنها که ما در هستی شروع یک JPG جدید، اما آیا 129 00:07:48,710 --> 00:07:50,655 ما در حال حاضر در بر داشت JPG یا نه. 130 00:07:50,655 --> 00:07:55,390 >> اگر این شروع یک JPG جدید است، ما می خواهید برای بستن فایل JPG فعلی ما اگر 131 00:07:55,390 --> 00:07:59,110 ما باید یک باز، و باز یکی از جدید به ارسال به. 132 00:07:59,110 --> 00:08:03,340 اگر آن را از آغاز JPG جدید نیست، هر چند، ما فایل JPG همان نگه داشتن 133 00:08:03,340 --> 00:08:05,910 باز کردن و نوشتن به آن. 134 00:08:05,910 --> 00:08:10,100 ما به بافر ما را به هر کدام ارسال فایل JPG ما باز، به شرطی که 135 00:08:10,100 --> 00:08:12,120 ما باید یک باز است، البته. 136 00:08:12,120 --> 00:08:16,190 اگر ما اولین JPG ما یافت نشد در عین حال، ما هیچ چیز را ارسال نمی کند. 137 00:08:16,190 --> 00:08:20,290 و این روند تا زمانی که شما ادامه می دهد رسیدن به انتهای فایل کارت. 138 00:08:20,290 --> 00:08:23,410 >> و در نهایت، شما می خواهید به اطمینان حاصل کنید که هر شما fclose 139 00:08:23,410 --> 00:08:25,800 فایل های که شما fopened ام. 140 00:08:25,800 --> 00:08:28,360 هنگامی که شما راحت با هستی مفاهیم، ​​نگاهی به برخی از 141 00:08:28,360 --> 00:08:30,840 شبه، که من در اینجا گنجانده شده است. 142 00:08:30,840 --> 00:08:34,830 اول، شما می خواهید برای باز کردن فایل کارت، و سپس مراحل زیر را تکرار 143 00:08:34,830 --> 00:08:37,144 تا زمانی که شما رسیده ام پایان کارت. 144 00:08:37,144 --> 00:08:40,880 شما می خواهید به عنوان خوانده شده 512 بایت به یک بافر شده است. 145 00:08:40,880 --> 00:08:43,934 با استفاده از این بافر، شما می خواهید برای بررسی آیا شما در شروع یک هستید 146 00:08:43,934 --> 00:08:45,300 JPG جدید یا نه. 147 00:08:45,300 --> 00:08:48,400 و پاسخ به این سوال خواهد شد تحت تاثیر قرار مدیریت فایل خود را - 148 00:08:48,400 --> 00:08:51,940 که فایل ها را باز می کنید، که آنهایی که می توانم به شما نزدیک است. 149 00:08:51,940 --> 00:08:55,220 >> سپس، شما در حال حاضر در بر داشت JPG؟ 150 00:08:55,220 --> 00:08:57,740 چگونه شما را نگه آهنگ از که؟ 151 00:08:57,740 --> 00:09:01,735 پس از آن، بسته به نوع آن، شما هم می خواهید ارسال به JPG فعلی است که شما 152 00:09:01,735 --> 00:09:07,090 باز، و یا ارسال آن را در همه نیست، چون شما یک JPG یافت نشده است. 153 00:09:07,090 --> 00:09:10,870 در نهایت، هنگامی که شما به پایان رسیده فایل، شما می خواهید برای بستن هر 154 00:09:10,870 --> 00:09:12,590 باقی مانده فایل هایی که شما باز شود. 155 00:09:12,590 --> 00:09:14,590 ما می خواهیم مرتب در اینجا. 156 00:09:14,590 --> 00:09:18,790 >> و با آن، شما همه از بهبود کرده ام فایل های از دست رفته از حافظه 157 00:09:18,790 --> 00:09:21,620 کارت است، که یک شاهکار بسیار شگفت انگیز است. 158 00:09:21,620 --> 00:09:23,430 بنابراین خود را در پشت پت. 159 00:09:23,430 --> 00:09:27,560 اما، یک عنصر بیشتر به وجود دارد PSET، که مسابقه. 160 00:09:27,560 --> 00:09:30,920 شما باید دریابید که تمام عکس ها که شما بهبود کرده ام در واقع 161 00:09:30,920 --> 00:09:32,820 تصاویر از کارکنان CS50 است. 162 00:09:32,820 --> 00:09:38,500 بنابراین اگر شما در محوطه دانشگاه و یا در جایی هستید در نزدیکی، سپس شما می توانید تصاویر را با را 163 00:09:38,500 --> 00:09:42,600 کارکنان و بخش است که اکثر تصاویر با کارکنان 164 00:09:42,600 --> 00:09:46,940 از فایل های بهبود خود را دریافت جایزه عالی. 165 00:09:46,940 --> 00:09:50,650 با آن، و سپس شما به پایان رسید PSET بهبود می یابند. 166 00:09:50,650 --> 00:09:53,600 نام من Zamyla است، و این CS50 است. 167 00:09:53,600 --> 00:10:01,835