1 00:00:00,000 --> 00:00:09,780 >> [Mūzikas atskaņošanai] 2 00:00:09,780 --> 00:00:11,150 >> ZAMYLA Chan: Pieņemsim risināt atgūt. 3 00:00:11,150 --> 00:00:14,030 Atgūt, iespējams, ir mana mīļākā PSET, un galvenokārt tāpēc, ka es domāju, ka tas ir 4 00:00:14,030 --> 00:00:15,650 ļoti, ļoti foršs. 5 00:00:15,650 --> 00:00:19,040 Būtībā, jūs esat dota atmiņa card fails, kurā 6 00:00:19,040 --> 00:00:20,900 attēli ir izdzēsti. 7 00:00:20,900 --> 00:00:23,650 Bet tas, ko jūs gatavojas darīt, ir atgūt tos visus. 8 00:00:23,650 --> 00:00:24,250 >> OK. 9 00:00:24,250 --> 00:00:28,230 Tātad, tas ir ļoti aizraujoši, bet varbūt nedaudz iebiedēt, jo tu esi 10 00:00:28,230 --> 00:00:32,430 dota tukša C failu un Jums ir jāaizpilda tā collas 11 00:00:32,430 --> 00:00:36,250 Labi, tāpēc pieņemsim lauzt šo pārvaldāmu daļās. 12 00:00:36,250 --> 00:00:38,160 Jūs vēlaties, lai atvērtu Atmiņas kartes failu. 13 00:00:38,160 --> 00:00:39,900 Tas šķiet vienkāršs pietiekami. 14 00:00:39,900 --> 00:00:43,030 Tad, atrast sākumu no JPG attēlu. 15 00:00:43,030 --> 00:00:46,740 Visi faili par šo atmiņu karte būs JPGs. 16 00:00:46,740 --> 00:00:50,840 Pēc tam, kad jūs atradīsiet sākuma, jūs gatavojas atvērt jaunu JPG, ka 17 00:00:50,840 --> 00:00:57,610 ir, piemēram, izveidot JPG, un rakstīt 512 baits laikā, kamēr jauna JPG ir 18 00:00:57,610 --> 00:01:02,930 konstatēts, un beidzot ar programmu, tiklīdz Jums atklāt beigām failu. 19 00:01:02,930 --> 00:01:06,400 >> Tātad pirmie soļi, pirmais ir atvērt atmiņas kartes failu. 20 00:01:06,400 --> 00:01:09,850 Bet jūs zināt, tas jau ir, un tur ir failu I / O funkciju, kas notiek, lai 21 00:01:09,850 --> 00:01:12,030 izrādīties ļoti noderīga. 22 00:01:12,030 --> 00:01:12,820 OK. 23 00:01:12,820 --> 00:01:14,760 Tātad, kādi ir JPGs? 24 00:01:14,760 --> 00:01:16,330 Tāpēc, ka mums ir nepieciešams sākumā to. 25 00:01:16,330 --> 00:01:21,310 Nu, JPGs, tāpat kā bitu kartēm, ir tikai sekvences baitu. 26 00:01:21,310 --> 00:01:30,660 Par laimi, katru JPG sākas ar vai nu 0xff, 0xd8, 0xff, 0xe0, viens secība 27 00:01:30,660 --> 00:01:33,610 baitu, vai cita secība baitu. 28 00:01:33,610 --> 00:01:37,250 >> Tātad šie četri baiti norāda sākums JPG. 29 00:01:37,250 --> 00:01:40,780 Neviens cits kā šo divu kombinācijām četru baitu. 30 00:01:40,780 --> 00:01:44,840 Un par laimi mums, vēl viens fakts, ka mēs var izmantot, ir, ka katrs 31 00:01:44,840 --> 00:01:48,550 JPG tiek glabāti side-by-side atmiņas kartē. 32 00:01:48,550 --> 00:01:52,210 Man bija struktūru Atmiņas kartes shematiski par šo 33 00:01:52,210 --> 00:01:53,310 slaidu šeit. 34 00:01:53,310 --> 00:01:59,270 Lūk, katru kvadrātveida, katrs taisnstūris, ir 512 baiti, un tas sāk 35 00:01:59,270 --> 00:02:01,750 ar Gray, ka mums nav tiešām ir JPG. 36 00:02:01,750 --> 00:02:05,700 >> Bet tad mēs beidzot hit bloks ar zvaigzni. 37 00:02:05,700 --> 00:02:10,940 Tas nozīmē, ka pirmie četri baiti out no tiem 512 ir viens no šiem diviem 38 00:02:10,940 --> 00:02:13,230 sākot sekvences JPG. 39 00:02:13,230 --> 00:02:17,340 Un mēs aiziet no turienes, un pēc tam, kad viens JPG beidzas, nākamais sākas. 40 00:02:17,340 --> 00:02:20,990 Mums nav kādreiz ir vairāk pelēks telpas vidu. 41 00:02:20,990 --> 00:02:25,550 >> Bet kā mēs varam faktiski izlasīt šo, un lasīt 512 baiti, lai mēs varētu veikt 42 00:02:25,550 --> 00:02:27,500 salīdzinājums pirmajā vietā? 43 00:02:27,500 --> 00:02:33,470 Nu, iesim atpakaļ uz fread, kas notiek ar struktūrai, kas satur 44 00:02:33,470 --> 00:02:34,470 baiti, ka jūs lasāt. 45 00:02:34,470 --> 00:02:36,570 Tātad jūs gatavojas īstenot tiem, kas tur - 46 00:02:36,570 --> 00:02:42,192 lielumu, skaitu, un pēc tam inpointer ka jūs lasāt no. 47 00:02:42,192 --> 00:02:49,900 Tagad mēs vēlamies, lai izlasītu 512 laikā, un mēs vēlamies saglabāt šo buferi, 48 00:02:49,900 --> 00:02:50,700 Es esmu gatavojas, lai izsauktu to. 49 00:02:50,700 --> 00:02:54,100 >> Būtībā, mēs ejam, lai noturētu uz šiem 512 baitu un darīt 50 00:02:54,100 --> 00:02:55,500 lietas ar to, labi? 51 00:02:55,500 --> 00:02:58,260 Mēs vai nu gatavojas salīdzināt pirmais četri baiti, vai mēs spēsim 52 00:02:58,260 --> 00:02:59,830 lasīt to, OK? 53 00:02:59,830 --> 00:03:05,050 Tātad dati rādītājs tam kalpo kā savu buferi, un pēc 54 00:03:05,050 --> 00:03:07,745 inpointer, labi, ka ir tikai gatavojas lai atmiņas karti. 55 00:03:07,745 --> 00:03:09,500 >> Atpakaļ uz mūsu atmiņas kartes shematisks. 56 00:03:09,500 --> 00:03:14,690 Mēs ejam, lai izlasītu 512 baiti laikā, glabāšanai katru 512 baitu bloku 57 00:03:14,690 --> 00:03:19,190 buferī, kam uz tiem buferis, šos 512 baiti, kamēr mēs zinām, 58 00:03:19,190 --> 00:03:22,000 tieši to, ko darīt tiem. 59 00:03:22,000 --> 00:03:25,960 Tāpēc sākumā nav nekas, tāpēc mēs lasīt buferi, salīdzināt to, un 60 00:03:25,960 --> 00:03:28,160 mums nav nepieciešams kaut ko darīt ar to. 61 00:03:28,160 --> 00:03:32,030 Un tad mēs beidzot hit zvaigzne bloķēt, kas nozīmē, ka mēs esam 62 00:03:32,030 --> 00:03:33,630 konstatēts, mūsu pirmo JPG. 63 00:03:33,630 --> 00:03:36,560 Tāpēc bufera tagad turēt baiti no šī JPG. 64 00:03:36,560 --> 00:03:40,220 >> Nākamreiz, 512 baiti, jo viņi ne zvaigzne bloks, ir arī 65 00:03:40,220 --> 00:03:41,740 daļa no šīs JPG. 66 00:03:41,740 --> 00:03:47,630 Un JPGs ir nepārtraukti no turienes gada ir, līdz brīdim, kad mēs hit nākamo JPG. 67 00:03:47,630 --> 00:03:51,880 Un pēc tam buffer tad tur 512 baiti par šo JPG, un 68 00:03:51,880 --> 00:03:53,580 tā tālāk, un tā tālāk. 69 00:03:53,580 --> 00:03:54,250 OK. 70 00:03:54,250 --> 00:03:58,980 >> Tātad, kad jūs hit pirmo zvaigzni bloks, pirmkārt JPG, kā jūs 71 00:03:58,980 --> 00:04:01,910 faktiski, labi, atveriet to? 72 00:04:01,910 --> 00:04:04,990 Veidosim jaunu JPG. 73 00:04:04,990 --> 00:04:08,846 Par JPG datņu nosaukumus gatavojas tādā formātā, numurs, numurs, 74 00:04:08,846 --> 00:04:13,830 number.jpg, jo viņi nosaukts kārtību, kādā tie tiek atrasti, 75 00:04:13,830 --> 00:04:14,780 sākot no 0. 76 00:04:14,780 --> 00:04:19,890 >> Tātad pirmais JPG, ka jūs atrast būs 000.jpg. 77 00:04:19,890 --> 00:04:26,560 Tātad, iespējams, laba ideja, lai sekotu cik daudz JPGs esat atradis līdz šim. 78 00:04:26,560 --> 00:04:27,610 Tātad, tas ir faila nosaukums. 79 00:04:27,610 --> 00:04:29,660 Bet kā jūs faktiski darīt, ka? 80 00:04:29,660 --> 00:04:34,310 Nu, mēs ejam, lai izmantotu funkciju sauc sprintf. 81 00:04:34,310 --> 00:04:38,260 Mazliet līdzīgi printf, kur Jūs varat izmantot vietturus stīgas, 82 00:04:38,260 --> 00:04:42,420 izņemot šajā gadījumā sprintf drukāt failu ārā pašreizējo 83 00:04:42,420 --> 00:04:45,550 direktoriju, nevis uz terminālu. 84 00:04:45,550 --> 00:04:46,120 >> OK. 85 00:04:46,120 --> 00:04:49,950 Tāpēc šeit mēs redzam, ka mums ir nosaukums, char masīvs, kas saglabās 86 00:04:49,950 --> 00:04:55,120 izrietošo stīgu, un mēs caurlaide nosaukums faktiskā string ar 87 00:04:55,120 --> 00:04:58,720 vietturis, tāpat kā mēs esam iemācījušies darīt ar printf. 88 00:04:58,720 --> 00:05:05,530 Bet tas kods, kas man ir šeit dos 2.JPG, nevis 002.jpg. 89 00:05:05,530 --> 00:05:09,920 Tāpēc es ņemšu atvaļinājumu jums, lai uzzinātu, kā modificēt vietturi, lai padarītu 90 00:05:09,920 --> 00:05:11,920 pareizais nosaukums. 91 00:05:11,920 --> 00:05:12,610 >> OK. 92 00:05:12,610 --> 00:05:17,390 Tātad, kad jūs esat sprintf'd tad jūs varat atvērt šo failu, jo tas eksistē 93 00:05:17,390 --> 00:05:22,690 jūsu direktorija ar fopen, izmantojot nosaukums, un tad kāds režīms vēlaties 94 00:05:22,690 --> 00:05:25,140 atvērt šo failu iekšā 95 00:05:25,140 --> 00:05:30,260 Tāpēc tagad, ka mēs esam atvēruši jaunu JPG failu, Tagad mēs varam rakstīt 512 baiti at 96 00:05:30,260 --> 00:05:33,320 laiks, kamēr jaunais JPG ir atrasts. 97 00:05:33,320 --> 00:05:36,640 Tātad, pieņemsim citu izskatu pie sintaksi fwrite. 98 00:05:36,640 --> 00:05:40,060 >> Es zinu, ka es esmu parādot šo slaidu daudz, bet es tikai vēlos, lai pārliecinātos, ka 99 00:05:40,060 --> 00:05:43,530 jūs puiši nesaņem pārāk sajaukt, jo Es zinu, ka tas ir ļoti viegli 100 00:05:43,530 --> 00:05:47,000 sajauc pirmo un pēdējo arguments, jo īpaši. 101 00:05:47,000 --> 00:05:54,390 Bet atcerieties, ka jūs esat rakstiski no Jūsu bufera vērā File attēlus. 102 00:05:54,390 --> 00:05:59,250 >> Tagad, kad jūs zināt, kā rakstīt 512 baiti savā JPG failu, kas jūs esat 103 00:05:59,250 --> 00:06:03,230 izveidots, labi, mēs vēlamies, lai apturētu, ka process, kad mēs esam sasnieguši 104 00:06:03,230 --> 00:06:06,720 mūsu karti, jo tur nebūs jebkuri vairāk bildes var atrast. 105 00:06:06,720 --> 00:06:10,760 Tāpēc iesim atpakaļ uz fread vēlreiz, es apsolu. 106 00:06:10,760 --> 00:06:15,600 fread atgriežas kā daudz priekšmetus par lielumu, izmērs, bija gatavi veiksmīgi. 107 00:06:15,600 --> 00:06:19,440 Ideālā gadījumā tas būs kāds Jūs pāriet uz numuru, vai ne? 108 00:06:19,440 --> 00:06:24,140 Tāpēc, ka jūs mēģināt lasīt numuru elementu izmēru, izmēru. 109 00:06:24,140 --> 00:06:29,380 Bet, ja fread nespēj lasīt, ka vairāki elementi, tad tas būs atpakaļ 110 00:06:29,380 --> 00:06:32,530 kāds numurs tas lasīt veiksmīgi. 111 00:06:32,530 --> 00:06:36,310 >> Tagad, viena svarīga lieta atzīmēt ir ka, ja jūs izmantojat citu failu I / O 112 00:06:36,310 --> 00:06:43,860 funkcijas, piemēram, fgetc, tas būs arī atpakaļ cik daudz preces to lasīt veiksmīgi. 113 00:06:43,860 --> 00:06:48,000 Kas ir noderīgi par šo funkciju ka, ja jūs izmantojat funkcijas iekšpusē 114 00:06:48,000 --> 00:06:53,190 nosacījums, tas būs izpildīt sevi, bet nosakot, ka stāvoklis, kas ir 115 00:06:53,190 --> 00:06:54,340 tikai patiešām noderīga. 116 00:06:54,340 --> 00:07:00,440 Tātad, ja jums ir šī apstākļus, teiksim, ja fread buferis, sizeof DOG, 2, 117 00:07:00,440 --> 00:07:04,870 rādītājs, vienāds vienāds ar 1, kas nozīmē, ka es gribētu, lai lasītu 118 00:07:04,870 --> 00:07:06,540 2 suņi brīdī. 119 00:07:06,540 --> 00:07:13,490 Bet, ja fread atgriež 1, nevis 2 kā sagaidāms, kas nozīmē, ka ir 2 120 00:07:13,490 --> 00:07:16,480 suņiem atstāja manā failā, bet gan 1. 121 00:07:16,480 --> 00:07:22,450 Bet, ja tas atgriež 2, tad man vēl ir šie 2 suņi iekšpusē manu bufera. 122 00:07:22,450 --> 00:07:26,280 >> Tāpēc tagad, ka dod jums sajūtu par to, kā pārbaudīt beigās failu, bet 123 00:07:26,280 --> 00:07:28,940 iesim cauri tagad loģiku. 124 00:07:28,940 --> 00:07:32,460 Kā mēs tiešām gabals visiem šie elementi kopā? 125 00:07:32,460 --> 00:07:36,880 Pēc tam, kad mēs hit mūsu pirmo JPG, jo mēs zinām, ka JPGs tiek glabāti 126 00:07:36,880 --> 00:07:40,910 contiguously, mēs rakstiski līdz mēs beigs karšu materiāliem. 127 00:07:40,910 --> 00:07:43,950 Bet mēs negribam, lai rakstītu kaut līdz tam. 128 00:07:43,950 --> 00:07:48,710 Tātad tas ir svarīgi, ne tikai to, ka mēs esam pie sākums jaunai JPG, bet vai 129 00:07:48,710 --> 00:07:50,655 mēs jau esam atraduši JPG vai ne. 130 00:07:50,655 --> 00:07:55,390 >> Ja tas ir sākums jaunam JPG, mēs vēlaties aizvērt mūsu pašreizējo JPG failu, ja 131 00:07:55,390 --> 00:07:59,110 mums ir viena atvērta un atklāta jauna rakstīt par. 132 00:07:59,110 --> 00:08:03,340 Ja tas nav sākums jaunās JPG, lai gan, mēs saglabāt to pašu JPG failu 133 00:08:03,340 --> 00:08:05,910 atvērt un rakstīt par to. 134 00:08:05,910 --> 00:08:10,100 Mēs rakstīt mūsu bufera uz izvēloties JPG fails mums ir atvērts, ar nosacījumu, ka 135 00:08:10,100 --> 00:08:12,120 mums ir viens atklāts, protams. 136 00:08:12,120 --> 00:08:16,190 Ja mēs neesam atraduši savu pirmo JPG tomēr, mums nav rakstīt neko. 137 00:08:16,190 --> 00:08:20,290 Un šis process turpinās, kamēr jums beigs karšu materiāliem. 138 00:08:20,290 --> 00:08:23,410 >> Un visbeidzot, jūs vēlaties, lai pārliecinieties, ka jūs fclose jebkura 139 00:08:23,410 --> 00:08:25,800 failus, ka jūs esat fopened. 140 00:08:25,800 --> 00:08:28,360 Kad esat apmierināts ar koncepcijas, ieskatieties daži 141 00:08:28,360 --> 00:08:30,840 pseudocode, kas es esmu iekļauts šeit. 142 00:08:30,840 --> 00:08:34,830 Pirmkārt, jūs vēlaties, lai atvērtu kartes failu, un pēc tam atkārtojiet šo procesu 143 00:08:34,830 --> 00:08:37,144 līdz esat sasnieguši gals karti. 144 00:08:37,144 --> 00:08:40,880 Jūs vēlaties lasīt 512 baiti buferī. 145 00:08:40,880 --> 00:08:43,934 Izmantojot šo buferi, jūs vēlaties, lai pārbaudītu vai jūs esat sākumā 146 00:08:43,934 --> 00:08:45,300 Jaunais JPG vai ne. 147 00:08:45,300 --> 00:08:48,400 Un atbilde uz šo jautājumu būs ietekmēt jūsu failu pārvaldību - 148 00:08:48,400 --> 00:08:51,940 kas failus atvērt, kas tiem jums tuvu. 149 00:08:51,940 --> 00:08:55,220 >> Tad jūs esat jau atraduši JPG? 150 00:08:55,220 --> 00:08:57,740 Cik tu esi bijis tur dziesmu no tā? 151 00:08:57,740 --> 00:09:01,735 Pēc tam, atkarībā no tā, ka jūs vai nu iestrādāt pašreizējā JPG, ka jūs 152 00:09:01,735 --> 00:09:07,090 ir atvērts, vai ne rakstīt to visu, jo jums nav atrasts JPG vēl. 153 00:09:07,090 --> 00:09:10,870 Beidzot, kad jūs esat sasnieguši failu, jūs vēlaties slēgt jebkuru 154 00:09:10,870 --> 00:09:12,590 Atlikušo failus, kas ir atvērts. 155 00:09:12,590 --> 00:09:14,590 Mēs gribam būt sakārtot šeit. 156 00:09:14,590 --> 00:09:18,790 >> Un ar to, ka jūs esat atgūt visus trūkstošos failus no šīs atmiņas 157 00:09:18,790 --> 00:09:21,620 karte, kas ir diezgan pārsteidzošs feat. 158 00:09:21,620 --> 00:09:23,430 Tātad, pat sevi par atpakaļ. 159 00:09:23,430 --> 00:09:27,560 Bet tur ir vēl viens elements, kas PSET, kas ir konkurss. 160 00:09:27,560 --> 00:09:30,920 Jūs atradīsiet, ka visas bildes ka jūs esat jāatgūst faktiski 161 00:09:30,920 --> 00:09:32,820 bildes CS50 personāla. 162 00:09:32,820 --> 00:09:38,500 Tātad, ja jūs esat par universitātes pilsētiņā vai kaut kur tuvu, tad jūs varat veikt bildes ar 163 00:09:38,500 --> 00:09:42,600 darbinieki, un sadaļa, kas ir vairums bildes ar darbiniekiem 164 00:09:42,600 --> 00:09:46,940 no savām atgūtajām failiem būs saņemt awesome balvu. 165 00:09:46,940 --> 00:09:50,650 Ar to, ka tad, kad esat pabeidzis atgūt PSET. 166 00:09:50,650 --> 00:09:53,600 Mans vārds ir Zamyla, un tas ir CS50. 167 00:09:53,600 --> 00:10:01,835