1 00:00:00,000 --> 00:00:09,780 >> [Музички] 2 00:00:09,780 --> 00:00:11,150 >> ZAMYLA Чан: Да се ​​справи со се опорави. 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 со оглед на празен Ц датотека и што треба да го пополнат внатре 11 00:00:32,430 --> 00:00:36,250 ОК, па ајде да се скрши оваа во податлив делови. 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 Сум претставен структурата на мемориска картичка шематски на овој 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, која зема во struct, која ќе содржи 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 ја прочита во, во ред? 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 Па ајде земи друг изглед на синтаксата на запишување. 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 тампон, 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 >> И, конечно, ќе сакате да бидете сигурни дека ќе запишам било 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 pseudocode, кои јас сум вклучен тука. 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