1 00:00:00,000 --> 00:00:09,780 >> [Muzikavimo] 2 00:00:09,780 --> 00:00:11,150 >> ZAMYLA CHAN: Leiskite spręsti atsigauti. 3 00:00:11,150 --> 00:00:14,030 Atkurti turbūt mano mėgstamiausia PSET, ir daugiausia dėl to, manau, kad tai 4 00:00:14,030 --> 00:00:15,650 tikrai, tikrai cool. 5 00:00:15,650 --> 00:00:19,040 Iš esmės, jums suteikta atmintį kartoteka, kurioje 6 00:00:19,040 --> 00:00:20,900 nuotraukos buvo ištrintas. 7 00:00:20,900 --> 00:00:23,650 Bet ką jūs ketinate padaryti, tai susigrąžinti juos visus. 8 00:00:23,650 --> 00:00:24,250 >> Gerai. 9 00:00:24,250 --> 00:00:28,230 Taigi tai tikrai įdomus, bet gal šiek tiek bauginanti, nes jūs 10 00:00:28,230 --> 00:00:32,430 teikiama tuščia C failą ir Jūs turite užpildyti jį in 11 00:00:32,430 --> 00:00:36,250 Gerai, kad galime padalyti į valdomas dalis. 12 00:00:36,250 --> 00:00:38,160 Jūs norite atidaryti atminties kortelės failas. 13 00:00:38,160 --> 00:00:39,900 Tai atrodo gana paprasta. 14 00:00:39,900 --> 00:00:43,030 Tada rasti pradžią iš JPG failą. 15 00:00:43,030 --> 00:00:46,740 Visi šioje atminties failai kortelė bus JPG. 16 00:00:46,740 --> 00:00:50,840 Tada, kai jums rasti pradžioje, jūs ketinate atidaryti naują JPG, kad 17 00:00:50,840 --> 00:00:57,610 yra, pavyzdžiui, sukurti JPG, ir rašyti 512 baitas metu iki naujos JPG yra 18 00:00:57,610 --> 00:01:02,930 rasti, ir baigiant programą, kai aptikti failo pabaigą. 19 00:01:02,930 --> 00:01:06,400 >> Taigi pirmieji žingsniai Pirmasis atidaryti atminties kortelės failas. 20 00:01:06,400 --> 00:01:09,850 Bet žinote, tai jau ir yra failą I / O funkcija, kuri vyksta 21 00:01:09,850 --> 00:01:12,030 būti labai naudinga. 22 00:01:12,030 --> 00:01:12,820 Gerai. 23 00:01:12,820 --> 00:01:14,760 Taigi, kas yra JPG? 24 00:01:14,760 --> 00:01:16,330 Nes mes turime pradžioje jį. 25 00:01:16,330 --> 00:01:21,310 Na, JPG, kaip bitų žemėlapiai, yra tik sekos baitų. 26 00:01:21,310 --> 00:01:30,660 Laimei, kiekvienas JPG prasideda arba 0xFF, 0xd8, 0xFF, 0xe0, viena seka 27 00:01:30,660 --> 00:01:33,610 baitų, arba kitą seka baitai. 28 00:01:33,610 --> 00:01:37,250 >> Taigi tie keturi baitai rodo iš JPG pradžia. 29 00:01:37,250 --> 00:01:40,780 Niekas kitas, kaip šių dviejų derinių keturių baitų. 30 00:01:40,780 --> 00:01:44,840 Ir laimei, mums, dar vienas faktas, kad mes gali pasinaudoti, kad kiekvienas 31 00:01:44,840 --> 00:01:48,550 JPG saugomi side-by-side atminties kortelėje. 32 00:01:48,550 --> 00:01:52,210 Aš reprezentavo struktūra atminties kortelė schematiškai apie tai 33 00:01:52,210 --> 00:01:53,310 stumkite čia. 34 00:01:53,310 --> 00:01:59,270 Čia kiekvienas kvadratinis, kiekvienas stačiakampis, yra 512 baitų, ir jis pradeda 35 00:01:59,270 --> 00:02:01,750 su į, kad pilka mes neturime tikrai JPG. 36 00:02:01,750 --> 00:02:05,700 >> Bet tada mes pagaliau paspauskite blokas su žvaigžde. 37 00:02:05,700 --> 00:02:10,940 Tai reiškia, kad pirmieji keturi baitai out iš tų 512 yra vienas iš tų dviejų 38 00:02:10,940 --> 00:02:13,230 pradedant sekas JPG. 39 00:02:13,230 --> 00:02:17,340 Ir mes einame iš ten, ir tada, kai vienas JPG baigiasi, šalia vienas prasideda. 40 00:02:17,340 --> 00:02:20,990 Mes ne kada nors, bet daugiau pilka erdvė tarp. 41 00:02:20,990 --> 00:02:25,550 >> Bet kaip mes iš tikrųjų perskaityti šią informaciją, ir skaityti 512 baitų, kad mes galime padaryti 42 00:02:25,550 --> 00:02:27,500 palyginimas pirmoji vieta? 43 00:02:27,500 --> 00:02:33,470 Na, grįžkime į fread, kuris priima į struct, kurioje bus 44 00:02:33,470 --> 00:02:34,470 baitai, kad jūs skaitote. 45 00:02:34,470 --> 00:02:36,570 Taigi, jūs ketinate daryti tie ten - 46 00:02:36,570 --> 00:02:42,192 dydis, numeris, o tada inpointer kad jūs skaitote iš. 47 00:02:42,192 --> 00:02:49,900 Dabar norime tuo metu 512 skaityti, ir mes norime išsaugoti tai buferyje, 48 00:02:49,900 --> 00:02:50,700 Aš ruošiuosi jį pavadinti. 49 00:02:50,700 --> 00:02:54,100 >> Iš esmės, mes ketiname turėti ant tų 512 baitų ir padaryti 50 00:02:54,100 --> 00:02:55,500 viskas su juo, tiesa? 51 00:02:55,500 --> 00:02:58,260 Mes arba ketina palyginti pirmas keturi baitai, ar mes ketiname 52 00:02:58,260 --> 00:02:59,830 skaityti jį, gerai? 53 00:02:59,830 --> 00:03:05,050 Taigi duomenų žymeklis bus tada tarnauti kaip jūsų buferio ir 54 00:03:05,050 --> 00:03:07,745 inpointer, gerai, kad tiesiog vyksta būti jūsų atminties kortelė. 55 00:03:07,745 --> 00:03:09,500 >> Atgal į mūsų atminties kortelės schema. 56 00:03:09,500 --> 00:03:14,690 Mes ketiname skaityti 512 baitų metu, saugoti kiekvieną 512 baitų bloką 57 00:03:14,690 --> 00:03:19,190 į buferį, įsikibęs tų buferio, tuos 512 baitų, kol mes žinome, 58 00:03:19,190 --> 00:03:22,000 ką daryti juos. 59 00:03:22,000 --> 00:03:25,960 Taigi pradžia yra nieko, todėl mes skaityti buferis, palyginti ir 60 00:03:25,960 --> 00:03:28,160 mums nereikės nieko daryti su juo. 61 00:03:28,160 --> 00:03:32,030 Ir tada, pagaliau nukentėjo žvaigždę blokuoti, tai reiškia, kad mes 62 00:03:32,030 --> 00:03:33,630 rasti savo pirmąjį JPG. 63 00:03:33,630 --> 00:03:36,560 Taigi buferis dabar turi baitais nuo tos JPG. 64 00:03:36,560 --> 00:03:40,220 >> Kitą kartą 512 baitai, nes jie ne žvaigždė blokas, taip pat 65 00:03:40,220 --> 00:03:41,740 dalis šios JPG. 66 00:03:41,740 --> 00:03:47,630 Ir JPG yra nuolat iš ten ant visų, kol mes Hit kitą JPG. 67 00:03:47,630 --> 00:03:51,880 Ir tada buferis tada turi 512 baitų to JPG ir 68 00:03:51,880 --> 00:03:53,580 tt, ir pan. 69 00:03:53,580 --> 00:03:54,250 Gerai. 70 00:03:54,250 --> 00:03:58,980 >> Taigi, kai paspausite pirmasis žvaigžde blokas, pirmasis JPG, kaip jūs 71 00:03:58,980 --> 00:04:01,910 iš tikrųjų, gerai, jį atidaryti? 72 00:04:01,910 --> 00:04:04,990 Kurkime naują JPG. 73 00:04:04,990 --> 00:04:08,846 Už JPG varduose ketinate būti tokio formato, numeris, skaičius, 74 00:04:08,846 --> 00:04:13,830 number.jpg, nes jie įvardyti tvarka, kuria jie nustatė, 75 00:04:13,830 --> 00:04:14,780 pradedant 0. 76 00:04:14,780 --> 00:04:19,890 >> Taigi pirmasis JPG, kad jūs rasti bus 000.jpg. 77 00:04:19,890 --> 00:04:26,560 Taigi, tikriausiai gera idėja sekti , kiek JPG radote šiol. 78 00:04:26,560 --> 00:04:27,610 Štai failo pavadinimas. 79 00:04:27,610 --> 00:04:29,660 Bet kaip jūs iš tikrųjų padaryti, kad? 80 00:04:29,660 --> 00:04:34,310 Na, mes ketiname naudoti funkcija vadinama sprintf. 81 00:04:34,310 --> 00:04:38,260 Šiek tiek panašus į printf, kur galite naudoti vietos rezervavimo styginiams 82 00:04:38,260 --> 00:04:42,420 išskyrus šiuo atveju sprintf bus atspausdinti bylą iš į srovę 83 00:04:42,420 --> 00:04:45,550 katalogas, o ne į terminalą. 84 00:04:45,550 --> 00:04:46,120 >> Gerai. 85 00:04:46,120 --> 00:04:49,950 Taigi čia matome, kad turime pavadinimą, char masyvas, kuris bus išsaugoti 86 00:04:49,950 --> 00:04:55,120 atstojamoji eilutę, ir mes pereiname į pavadinimas faktinio eilutės su 87 00:04:55,120 --> 00:04:58,720 vietos rezervavimo ženklų, kaip mes išmoko daryti su printf. 88 00:04:58,720 --> 00:05:05,530 Bet šis kodas, kad turiu čia duos 2.JPG, o ne 002.JPG. 89 00:05:05,530 --> 00:05:09,920 Taigi aš palieku jums išsiaiškinti, kaip pakeisti vietos rezervavimo ženklą, kad 90 00:05:09,920 --> 00:05:11,920 teisingas pavadinimas. 91 00:05:11,920 --> 00:05:12,610 >> Gerai. 92 00:05:12,610 --> 00:05:17,390 Taigi, kai jūs sprintf'd tada galite atidaryti tą failą, nes jis egzistuoja 93 00:05:17,390 --> 00:05:22,690 savo katalogą, su fopen, naudojant pavadinimas, o tada kokia režimas norite 94 00:05:22,690 --> 00:05:25,140 atidaryti tą failą in 95 00:05:25,140 --> 00:05:30,260 Taigi dabar, kad mes atidarėme naują JPG failą, dabar mes galime parašyti 512 baitų ne 96 00:05:30,260 --> 00:05:33,320 laiko, kol nauja JPG nerasta. 97 00:05:33,320 --> 00:05:36,640 Taigi leiskite dar kartą peržiūrėti prie fwrite sintaksė. 98 00:05:36,640 --> 00:05:40,060 >> Aš žinau, kad aš rodau šį slide daug, bet aš tik noriu įsitikinti, kad 99 00:05:40,060 --> 00:05:43,530 vaikinai negauna pernelyg supainioti, nes Žinau, kad tai labai lengva 100 00:05:43,530 --> 00:05:47,000 išmaišyti pirmas ir paskutinis argumentas, visų pirma. 101 00:05:47,000 --> 00:05:54,390 Bet atsiminkite, kad rašote iš Jūsų buferio į iš failų vaizdų. 102 00:05:54,390 --> 00:05:59,250 >> Dabar, kad žinote, kaip rašyti 512 baitų į jūsų JPG failą, kad jūs 103 00:05:59,250 --> 00:06:03,230 sukurta gerai, mes norime sustabdyti, kad procesas, kai mes pasiekė pabaigos 104 00:06:03,230 --> 00:06:06,720 mūsų skyriaus, nes ten nebus bet daugiau nuotraukų galima rasti. 105 00:06:06,720 --> 00:06:10,760 Taigi, grįžkime prie fread dar kartą, aš pažadu. 106 00:06:10,760 --> 00:06:15,600 fread grįžta kaip daug daiktų dydžio, dydis, buvo pasirengę sėkmingai. 107 00:06:15,600 --> 00:06:19,440 Geriausia, jei tai bus kokia pereisite už skaičius, tiesa? 108 00:06:19,440 --> 00:06:24,140 Kadangi jūs bandote skaityti numeris elementų dydžio, dydžio. 109 00:06:24,140 --> 00:06:29,380 Bet jei fread negali skaityti, kad skaičius elementų, tada jis bus grįžti 110 00:06:29,380 --> 00:06:32,530 kokia skaičius tai skaityti sėkmingai. 111 00:06:32,530 --> 00:06:36,310 >> Dabar vienas svarbus dalykas, reikia pažymėti, kad jei jūs naudojate kitą failą I / O 112 00:06:36,310 --> 00:06:43,860 funkcionuoja kaip fgetc, tai bus taip pat grįžti kiek prekių ji skaityti sėkmingai. 113 00:06:43,860 --> 00:06:48,000 Kas naudinga apie šią funkciją yra kad jei jūs naudojate funkcijas viduje 114 00:06:48,000 --> 00:06:53,190 sąlyga, kad bus įvykdyti pati, o Nustatant šią sąlygą, kuri yra 115 00:06:53,190 --> 00:06:54,340 tiesiog tikrai naudinga. 116 00:06:54,340 --> 00:07:00,440 Taigi, jei turite tai sąlygos, tarkim, jei fread buferis, sizeof ŠUNŲ, 2, 117 00:07:00,440 --> 00:07:04,870 rodyklė lygu lygu 1, ty tai reiškia, kad aš norėčiau skaityti 118 00:07:04,870 --> 00:07:06,540 2 šunys tuo metu. 119 00:07:06,540 --> 00:07:13,490 Bet jei fread grąžina 1, o ne 2, kaip Tikimasi, kad tai reiškia, kad yra 2 120 00:07:13,490 --> 00:07:16,480 šunys liko mano byla, o 1. 121 00:07:16,480 --> 00:07:22,450 Bet jei jis grąžina 2, tada dar turiu tie 2 šunys viduje mano buferį. 122 00:07:22,450 --> 00:07:26,280 >> Taigi dabar, kad suteikia jums, kaip prasminga patikrinti failo pabaigoje, tačiau 123 00:07:26,280 --> 00:07:28,940 eikime per dabar logika. 124 00:07:28,940 --> 00:07:32,460 Kaip mes faktiškai suvesti visus iš šių elementų kartu? 125 00:07:32,460 --> 00:07:36,880 Kai mes hit savo pirmąjį JPG, nes mes žinome, kad JPG saugomos 126 00:07:36,880 --> 00:07:40,910 Kaimynystėje, mes rašyti iki mes pasiekti kortelės failo pabaigą. 127 00:07:40,910 --> 00:07:43,950 Bet mes nenorime rašyti nors iki tol. 128 00:07:43,950 --> 00:07:48,710 Todėl labai svarbu, kad ne tik mes ne naujos JPG pradžia, tačiau ar 129 00:07:48,710 --> 00:07:50,655 mes jau rado JPG, ar ne. 130 00:07:50,655 --> 00:07:55,390 >> Jei Tai naujos JPG pradžia, mes norite uždaryti dabartinę mūsų JPG failą, jei 131 00:07:55,390 --> 00:07:59,110 mes turime vieną atidaryti ir atvira nauja rašyti į. 132 00:07:59,110 --> 00:08:03,340 Jei tai nėra naujos JPG pradžia, nors mes išlaikyti tą patį failą JPG formatu 133 00:08:03,340 --> 00:08:05,910 atidaryti ir rašyti į tą. 134 00:08:05,910 --> 00:08:10,100 Mes rašome buferio į kuri JPG failą turime atvira, su sąlyga, kad 135 00:08:10,100 --> 00:08:12,120 mes turime vieną atvirą, žinoma. 136 00:08:12,120 --> 00:08:16,190 Jei mes ne rasti mūsų pirmąjį JPG dar, mes nieko nerašo. 137 00:08:16,190 --> 00:08:20,290 Ir šis procesas tęsiasi tol, kol jums pasiekia kartotekoje pabaigą. 138 00:08:20,290 --> 00:08:23,410 >> Ir, pagaliau, jūs norite įsitikinti, įsitikinkite, kad jums fclose bet 139 00:08:23,410 --> 00:08:25,800 failus, kad jūs fopened. 140 00:08:25,800 --> 00:08:28,360 Kai esate patenkintas sąvokos, atsižvelgti į kai atrodo 141 00:08:28,360 --> 00:08:30,840 Pseudocode, o aš čia įtraukti. 142 00:08:30,840 --> 00:08:34,830 Pirma, jūs norite atidaryti kortelės failą, ir tada pakartokite šį procesą 143 00:08:34,830 --> 00:08:37,144 kol jūs pasiekėte kortelės galas. 144 00:08:37,144 --> 00:08:40,880 Jūs norite perskaityti 512 baitų į buferį. 145 00:08:40,880 --> 00:08:43,934 Naudojant tą buferį, jūs norite patikrinti ar jūs ne iš pradžios 146 00:08:43,934 --> 00:08:45,300 nauja JPG, ar ne. 147 00:08:45,300 --> 00:08:48,400 Ir atsakymas į šį klausimą bus įtakos jūsų failų valdymo - 148 00:08:48,400 --> 00:08:51,940 kurie failai atidaromi, kurios tie, kurie uždaryti. 149 00:08:51,940 --> 00:08:55,220 >> Tada jūs jau rado JPG? 150 00:08:55,220 --> 00:08:57,740 Kaip jums buvo išlaikyti kelio apie tai? 151 00:08:57,740 --> 00:09:01,735 Tada, priklausomai nuo to, jūs arba rašyti į dabartinę JPG, kad jūs 152 00:09:01,735 --> 00:09:07,090 turi atidaryti, ar ne rašyti ne visi, nes jums nepavyko rasti JPG dar. 153 00:09:07,090 --> 00:09:10,870 Galiausiai, kai jūs pasiekėte galą failą, jūs norite uždaryti bet 154 00:09:10,870 --> 00:09:12,590 Likusi failus, kad jūs turite atidaryti. 155 00:09:12,590 --> 00:09:14,590 Mes norime būti tvarkinga čia. 156 00:09:14,590 --> 00:09:18,790 >> O, kad jūs atsigavo visi trūkstamus failus iš tos atminties 157 00:09:18,790 --> 00:09:21,620 kortelės, kuri yra gana nuostabų feat. 158 00:09:21,620 --> 00:09:23,430 Taigi paglostyti save ant nugaros. 159 00:09:23,430 --> 00:09:27,560 Bet yra dar vienas elementas PSET, kuris yra konkursas. 160 00:09:27,560 --> 00:09:30,920 Jūs pamatysite, kad visas nuotraukas kad jūs išieškoti iš tikrųjų 161 00:09:30,920 --> 00:09:32,820 nuotraukos CS50 darbuotojų. 162 00:09:32,820 --> 00:09:38,500 Taigi, jei esate miesteliu ar kažkur šalia, tada jūs galite fotografuoti su 163 00:09:38,500 --> 00:09:42,600 darbuotojai ir skyrių, kuris turi dauguma nuotraukų su darbuotojais 164 00:09:42,600 --> 00:09:46,940 iš jų atgautų rinkmenų bus gauti nuostabus prizas. 165 00:09:46,940 --> 00:09:50,650 Su, kad tada, kai baigsite susigrąžinti PSET. 166 00:09:50,650 --> 00:09:53,600 Mano vardas Zamyla, ir tai yra CS50. 167 00:09:53,600 --> 00:10:01,835