1 00:00:00,000 --> 00:00:09,780 >> [Predvaja glasba] 2 00:00:09,780 --> 00:00:11,150 >> ZAMYLA CHAN: Pa dosti si opomore. 3 00:00:11,150 --> 00:00:14,030 Zopet je verjetno moja najljubša PSET, in predvsem zato, ker mislim, da je 4 00:00:14,030 --> 00:00:15,650 res, res kul. 5 00:00:15,650 --> 00:00:19,040 V bistvu, ste dobili spomin datotek kartica v katerem 6 00:00:19,040 --> 00:00:20,900 Slike so bile izbrisane. 7 00:00:20,900 --> 00:00:23,650 Ampak kaj boš storiti je, da jih vse opomore. 8 00:00:23,650 --> 00:00:24,250 >> OK. 9 00:00:24,250 --> 00:00:28,230 Torej, to je res zanimivo, ampak mogoče malo zastrašujoče, ker si 10 00:00:28,230 --> 00:00:32,430 saj prazna C datoteko in imate, da ga izpolnite palcev 11 00:00:32,430 --> 00:00:36,250 OK, tako da je ta odmor na posamezne dele. 12 00:00:36,250 --> 00:00:38,160 Boste želeli, da odprete Datoteka pomnilniške kartice. 13 00:00:38,160 --> 00:00:39,900 To se zdi preprost. 14 00:00:39,900 --> 00:00:43,030 Nato na začetek z sliko JPG. 15 00:00:43,030 --> 00:00:46,740 Vse datoteke na tej pomnilnika Kartica se bodo JPGs. 16 00:00:46,740 --> 00:00:50,840 Potem, ko boste našli začetek, boste odprli nov JPG, da 17 00:00:50,840 --> 00:00:57,610 je, recimo, ustvariti JPG, in napisati 512 bajt drugo, dokler nova je JPG 18 00:00:57,610 --> 00:01:02,930 ugotovljeno, in konča program, enkrat odkrije konec datoteke. 19 00:01:02,930 --> 00:01:06,400 >> Torej, prvi koraki Prvi je, da se odpre Datoteka pomnilniške kartice. 20 00:01:06,400 --> 00:01:09,850 Ampak vi to že veste, in tam datoteka I / O funkcija, ki bo 21 00:01:09,850 --> 00:01:12,030 zelo koristna. 22 00:01:12,030 --> 00:01:12,820 OK. 23 00:01:12,820 --> 00:01:14,760 Torej, kaj so JPGs? 24 00:01:14,760 --> 00:01:16,330 Ker moramo na začetku ga. 25 00:01:16,330 --> 00:01:21,310 No, jpg, tako kot bitni zemljevidi, so le zaporedje bajtov. 26 00:01:21,310 --> 00:01:30,660 Na srečo, vsak JPG začne z bodisi 0xFF, 0xd8, 0xFF, 0xe0, ena sekvenca 27 00:01:30,660 --> 00:01:33,610 bajtov ali drugo zaporedje bajtov. 28 00:01:33,610 --> 00:01:37,250 >> Torej ti štirje bajti kažejo začetek JPG. 29 00:01:37,250 --> 00:01:40,780 Nihče drug kot teh dveh kombinacijah štirih bajtov. 30 00:01:40,780 --> 00:01:44,840 In na srečo za nas, še dejstvo, da smo lahko izkoristijo je, da vsak 31 00:01:44,840 --> 00:01:48,550 JPG se shrani drug ob drugem na pomnilniško kartico. 32 00:01:48,550 --> 00:01:52,210 Sem predstavljal strukturo pomnilniške kartice shematično o tem 33 00:01:52,210 --> 00:01:53,310 potisnite tukaj. 34 00:01:53,310 --> 00:01:59,270 Tukaj vsak kvadratni, vsak pravokotnik, predstavlja 512 bajtov, in se začne 35 00:01:59,270 --> 00:02:01,750 s sivo v tem, da ne bomo Res imajo JPG. 36 00:02:01,750 --> 00:02:05,700 >> Ampak potem smo končno zadeli blok z zvezdico. 37 00:02:05,700 --> 00:02:10,940 To pomeni, da so prve štiri bajte ven tistih 512 so ena od teh dveh 38 00:02:10,940 --> 00:02:13,230 zagonu zaporedja JPG. 39 00:02:13,230 --> 00:02:17,340 In gremo od tam, in potem, ko en JPG konča, se začne nova. 40 00:02:17,340 --> 00:02:20,990 Ne bomo nikoli imeli več siva prostor vmes. 41 00:02:20,990 --> 00:02:25,550 >> Ampak, kako bomo dejansko prebral to in preberite 512 bajtov, tako da bomo lahko 42 00:02:25,550 --> 00:02:27,500 Primerjava prvo mesto? 43 00:02:27,500 --> 00:02:33,470 No, vrnimo se k fread, ki bo v Struktura, ki bo vsebovala 44 00:02:33,470 --> 00:02:34,470 bajta, ki jo berete. 45 00:02:34,470 --> 00:02:36,570 Torej boš dal tistih, ki tam - 46 00:02:36,570 --> 00:02:42,192 velikost, število in potem inpointer da berete iz. 47 00:02:42,192 --> 00:02:49,900 Zdaj smo želeli prebrati 512 naenkrat, in želimo to shraniti v vmesnem pomnilniku, 48 00:02:49,900 --> 00:02:50,700 Jaz ga bom poklical. 49 00:02:50,700 --> 00:02:54,100 >> V bistvu, bomo držite na teh 512 bajtov in ne 50 00:02:54,100 --> 00:02:55,500 stvari z njim, kajne? 51 00:02:55,500 --> 00:02:58,260 Mi smo bodisi bo primerjati prvi štiri bajte, ali bomo 52 00:02:58,260 --> 00:02:59,830 ga preberete v, OK? 53 00:02:59,830 --> 00:03:05,050 Torej podatki, kazalec bo nato služijo kot svojo pufrom 54 00:03:05,050 --> 00:03:07,745 inpointer, dobro, da bo le da bo na pomnilniški kartici. 55 00:03:07,745 --> 00:03:09,500 >> Nazaj na naši pomnilniške kartice shematski. 56 00:03:09,500 --> 00:03:14,690 Bomo prebrali 512 bajtov naenkrat, shrani vse 512-byte blok 57 00:03:14,690 --> 00:03:19,190 v buffer, ki imajo na tiste buffer, teh 512 bajtov, dokler ne vemo, 58 00:03:19,190 --> 00:03:22,000 kaj, da jih ne. 59 00:03:22,000 --> 00:03:25,960 Torej začetek ni nič, tako da bomo prebrali serum, ga primerjati, in 60 00:03:25,960 --> 00:03:28,160 nam ne bo treba storiti ničesar s tem. 61 00:03:28,160 --> 00:03:32,030 In potem smo končno zadeli zvezdo blokirati, kar pomeni, da smo že 62 00:03:32,030 --> 00:03:33,630 našel svoj prvi JPG. 63 00:03:33,630 --> 00:03:36,560 Torej buffer imajo sedaj bajti od tega JPG. 64 00:03:36,560 --> 00:03:40,220 >> Naslednjič, ko 512 bajtov, ker oni ni zvezda blok, so tudi 65 00:03:40,220 --> 00:03:41,740 del tega JPG. 66 00:03:41,740 --> 00:03:47,630 Jpg in so zvezne od tam naprej, dokler ne bomo zadeli naslednjo JPG. 67 00:03:47,630 --> 00:03:51,880 In potem buffer, potem ima 512 bajtov za to jpg, in 68 00:03:51,880 --> 00:03:53,580 tako naprej, in tako naprej. 69 00:03:53,580 --> 00:03:54,250 OK. 70 00:03:54,250 --> 00:03:58,980 >> Torej, ko ste zadeli prvi zvezdico blok, prva JPG, kako vam 71 00:03:58,980 --> 00:04:01,910 pravzaprav dobro, da jo odprete? 72 00:04:01,910 --> 00:04:04,990 Naredimo novo JPG. 73 00:04:04,990 --> 00:04:08,846 Imena datotek za JPG bodo biti v obliki, številka, številka, 74 00:04:08,846 --> 00:04:13,830 number.jpg v tem, da oni poimenovali v red, v katerem se ugotovi, 75 00:04:13,830 --> 00:04:14,780 se začne z 0. 76 00:04:14,780 --> 00:04:19,890 >> Torej, najprej JPG, ki ga Ugotovijo, bodo 000.jpg. 77 00:04:19,890 --> 00:04:26,560 Torej, verjetno dobra ideja, da bi spremljali koliko JPGs ste do sedaj našel. 78 00:04:26,560 --> 00:04:27,610 Tako da je ime datoteke. 79 00:04:27,610 --> 00:04:29,660 Ampak kako ste dejansko narediti to? 80 00:04:29,660 --> 00:04:34,310 No, bomo uporabili Funkcija se imenuje sprintf. 81 00:04:34,310 --> 00:04:38,260 Malo podobna printf, kjer lahko uporabite ograde za godala, 82 00:04:38,260 --> 00:04:42,420 razen v tem primeru bo sprintf tiskanje Datoteka ven v toku 83 00:04:42,420 --> 00:04:45,550 imenik, ni v terminal. 84 00:04:45,550 --> 00:04:46,120 >> OK. 85 00:04:46,120 --> 00:04:49,950 Torej, tukaj vidimo, da imamo naslov, char niz, ki se bo shranjevanje 86 00:04:49,950 --> 00:04:55,120 Nastali niz in se peljemo v Naslov dejanskega niz z 87 00:04:55,120 --> 00:04:58,720 ogrado, tako kot smo naučili narediti z printf. 88 00:04:58,720 --> 00:05:05,530 Toda ta oznaka, da imam tukaj bo 2.jpg, ne 002.jpg. 89 00:05:05,530 --> 00:05:09,920 Torej bom pustil na vas, da ugotovite, kako spremenite ogrado, da bi 90 00:05:09,920 --> 00:05:11,920 pravilno ime. 91 00:05:11,920 --> 00:05:12,610 >> OK. 92 00:05:12,610 --> 00:05:17,390 Torej, ko ste potem sprintf'd lahko odpreti to datoteko, saj obstaja v 93 00:05:17,390 --> 00:05:22,690 vaš imenik z fopen uporabo naslov, nato pa glede na želeni način 94 00:05:22,690 --> 00:05:25,140 Če želite odpreti to datoteko prijavite 95 00:05:25,140 --> 00:05:30,260 Torej sedaj, ko smo odprli nov JPG datoteko Zdaj lahko zapišemo 512 bajtov na 96 00:05:30,260 --> 00:05:33,320 časa, dokler se ne najde nov JPG. 97 00:05:33,320 --> 00:05:36,640 Torej, dajmo še enkrat pogledati na sintakso fwrite. 98 00:05:36,640 --> 00:05:40,060 >> Vem, da bom pokazal to slide veliko, ampak jaz samo želim, da poskrbite, da 99 00:05:40,060 --> 00:05:43,530 fantje ne dobijo preveč zmedeni, ker Vem, da je to zelo enostavno 100 00:05:43,530 --> 00:05:47,000 pomešajo prvi in ​​zadnji argument, zlasti. 101 00:05:47,000 --> 00:05:54,390 Ampak ne pozabite, da pišete iz vaš buffer v out slik datotek. 102 00:05:54,390 --> 00:05:59,250 >> Zdaj, ko vem, kako napisati 512 bajti v vašo JPG datoteko, da ste 103 00:05:59,250 --> 00:06:03,230 ustvaril, dobro, smo želeli ustaviti, da Proces, ko smo prišli do konca 104 00:06:03,230 --> 00:06:06,720 Naš kartice, ker ne bo prišlo vse več slik je mogoče najti. 105 00:06:06,720 --> 00:06:10,760 Torej vrnimo k fread enkrat več, obljubim. 106 00:06:10,760 --> 00:06:15,600 fread vrne koliko kosov velikosti, velikost, so bili pripravljeni v uspešno. 107 00:06:15,600 --> 00:06:19,440 Idealno bi bilo, to se bo glede na podaš v za številko, kajne? 108 00:06:19,440 --> 00:06:24,140 Ker skušaš prebrati več elementov velikosti, velikosti. 109 00:06:24,140 --> 00:06:29,380 Ampak, če fread ne more prebrati, da število elementov, potem pa se vrne 110 00:06:29,380 --> 00:06:32,530 ne glede na število uspešno prebrali. 111 00:06:32,530 --> 00:06:36,310 >> Zdaj pa ena pomembna stvar je tudi omeniti, da če uporabljate drugo datoteko I / O 112 00:06:36,310 --> 00:06:43,860 Funkcija kot fgetc, da bomo tudi vrniti koliko elementov je uspešno prebral. 113 00:06:43,860 --> 00:06:48,000 Kaj je uporaben o tej funkciji je da če uporabljate funkcije znotraj 114 00:06:48,000 --> 00:06:53,190 stanje, se bo sama izvršiti, medtem ko določitev tega pogoja, ki je 115 00:06:53,190 --> 00:06:54,340 samo res koristen. 116 00:06:54,340 --> 00:07:00,440 Torej, če imate to pogoje, recimo, če fread buffer, sizeof DOG, 2, 117 00:07:00,440 --> 00:07:04,870 kazalec, enaka enaka 1, ki pomeni, da bi rad, da se glasi 118 00:07:04,870 --> 00:07:06,540 2 psi v tistem času. 119 00:07:06,540 --> 00:07:13,490 Ampak, če fread vrne 1 namesto 2, kot je Pričakuje se, da pomeni, da je 2 120 00:07:13,490 --> 00:07:16,480 psi ostanejo v moji datoteki, ampak 1. 121 00:07:16,480 --> 00:07:22,450 Ampak, če se vrne 2, potem pa sem še vedno ti 2 psi znotraj mojega buffer. 122 00:07:22,450 --> 00:07:26,280 >> Torej sedaj, da vam daje občutek, kako preverimo koncu datoteke, vendar 123 00:07:26,280 --> 00:07:28,940 gremo skozi zdaj logiko. 124 00:07:28,940 --> 00:07:32,460 Kako pravzaprav kos vsem ti elementi skupaj? 125 00:07:32,460 --> 00:07:36,880 Ko smo zadeli naš prvi JPG, saj vemo, da so JPGs shranjeni 126 00:07:36,880 --> 00:07:40,910 contiguously, bomo pisno dokler dosežemo konec datoteke kartice. 127 00:07:40,910 --> 00:07:43,950 Vendar ne želimo, da napišete vse do takrat. 128 00:07:43,950 --> 00:07:48,710 Zato je pomembno, ne samo, da smo na začetek novega JPG, ampak ali 129 00:07:48,710 --> 00:07:50,655 smo že našli JPG ali ne. 130 00:07:50,655 --> 00:07:55,390 >> Če je začetek novega JPG, se bomo želite zapreti našo trenutno datoteko JPG če 131 00:07:55,390 --> 00:07:59,110 imamo eno odprta in odprt nov pisati v. 132 00:07:59,110 --> 00:08:03,340 Če to ni začetek novega JPG, čeprav bomo obdržati isto JPG datoteko 133 00:08:03,340 --> 00:08:05,910 Odpiranje in pisanje v to. 134 00:08:05,910 --> 00:08:10,100 Bomo napisali naši buffer v kar JPG datoteka imamo odprto, pod pogojem, da 135 00:08:10,100 --> 00:08:12,120 imamo en odprt, seveda. 136 00:08:12,120 --> 00:08:16,190 Če nismo našli naš prvi JPG vendar, mi ne piše nič. 137 00:08:16,190 --> 00:08:20,290 In ta proces se nadaljuje, dokler vas dosežejo konec datoteke kartice. 138 00:08:20,290 --> 00:08:23,410 >> In na koncu, boste želeli, da bi prepričajte, da ste fclose koli 139 00:08:23,410 --> 00:08:25,800 datoteke, ki ste fopened. 140 00:08:25,800 --> 00:08:28,360 Ko ste zadovoljni s koncepti, si oglejte nekaj 141 00:08:28,360 --> 00:08:30,840 psevdokoda, kar sem tu vključena. 142 00:08:30,840 --> 00:08:34,830 Prva, ki jo želite odpreti datoteko kartice, in nato ponovite naslednji postopek 143 00:08:34,830 --> 00:08:37,144 dokler ste dosegli Konec kartice. 144 00:08:37,144 --> 00:08:40,880 Želite prebrati 512 bajtov v buffer. 145 00:08:40,880 --> 00:08:43,934 Uporaba tega buffer, boste želeli preveriti ali ste na začetku 146 00:08:43,934 --> 00:08:45,300 Nova JPG ali ne. 147 00:08:45,300 --> 00:08:48,400 In odgovor na to vprašanje bo vplivalo na vašo upravljanje datotek - 148 00:08:48,400 --> 00:08:51,940 datoteke, ki jih odprete, ki tisti pa zapreš. 149 00:08:51,940 --> 00:08:55,220 >> Potem, ko ste že našli JPG? 150 00:08:55,220 --> 00:08:57,740 Kako ste bili vodenje track to? 151 00:08:57,740 --> 00:09:01,735 Nato pa glede na to, boste bodisi pisati v trenutni JPG, ki ga 152 00:09:01,735 --> 00:09:07,090 imajo odprto, ali ne pisati na vse, ker niste našli JPG še. 153 00:09:07,090 --> 00:09:10,870 Nazadnje, ko ste prišli do konca datoteka, boste želeli zapreti katerokoli 154 00:09:10,870 --> 00:09:12,590 Preostali datoteke, ki jih imate odprt. 155 00:09:12,590 --> 00:09:14,590 Želimo biti urejeno tukaj. 156 00:09:14,590 --> 00:09:18,790 >> In s tem, ko ste izterjati vse Manjkajoče datoteke iz tega pomnilnika 157 00:09:18,790 --> 00:09:21,620 kartico, ki je precej neverjetno feat. 158 00:09:21,620 --> 00:09:23,430 Torej pat sebe na hrbtni strani. 159 00:09:23,430 --> 00:09:27,560 Vendar pa obstaja še en element PSET, ki je tekmovanje. 160 00:09:27,560 --> 00:09:30,920 Boste ugotovili, da vse slike da si opomogla, so dejansko 161 00:09:30,920 --> 00:09:32,820 Slike osebja CS50 je. 162 00:09:32,820 --> 00:09:38,500 Torej, če ste na kampusu ali nekje v bližini, potem si lahko slike z 163 00:09:38,500 --> 00:09:42,600 osebja, in del, ki ima večina slik z uslužbencem 164 00:09:42,600 --> 00:09:46,940 od svojih izterjanih Datoteke dobili super nagrado. 165 00:09:46,940 --> 00:09:50,650 S tem, potem ste končali izterja PSET. 166 00:09:50,650 --> 00:09:53,600 Ime je Zamyla, in to je CS50. 167 00:09:53,600 --> 00:10:01,835