>> [Predvaja glasba]
>> ZAMYLA CHAN: Pa dosti si opomore.
Zopet je verjetno moja najljubša PSET, in predvsem zato, ker mislim, da je
res, res kul.
V bistvu, ste dobili spomin datotek kartica v katerem
Slike so bile izbrisane.
Ampak kaj boš storiti je, da jih vse opomore.
>> OK.
Torej, to je res zanimivo, ampak mogoče malo zastrašujoče, ker si
saj prazna C datoteko in imate, da ga izpolnite palcev
OK, tako da je ta odmor na posamezne dele.
Boste želeli, da odprete Datoteka pomnilniške kartice.
To se zdi preprost.
Nato na začetek z sliko JPG.
Vse datoteke na tej pomnilnika Kartica se bodo JPGs.
Potem, ko boste našli začetek, boste odprli nov JPG, da
je, recimo, ustvariti JPG, in napisati 512 bajt drugo, dokler nova je JPG
ugotovljeno, in konča program, enkrat odkrije konec datoteke.
>> Torej, prvi koraki Prvi je, da se odpre Datoteka pomnilniške kartice.
Ampak vi to že veste, in tam datoteka I / O funkcija, ki bo
zelo koristna.
OK.
Torej, kaj so JPGs?
Ker moramo na začetku ga.
No, jpg, tako kot bitni zemljevidi, so le zaporedje bajtov.
Na srečo, vsak JPG začne z bodisi 0xFF, 0xd8, 0xFF, 0xe0, ena sekvenca
bajtov ali drugo zaporedje bajtov.
>> Torej ti štirje bajti kažejo začetek JPG.
Nihče drug kot teh dveh kombinacijah štirih bajtov.
In na srečo za nas, še dejstvo, da smo lahko izkoristijo je, da vsak
JPG se shrani drug ob drugem na pomnilniško kartico.
Sem predstavljal strukturo pomnilniške kartice shematično o tem
potisnite tukaj.
Tukaj vsak kvadratni, vsak pravokotnik, predstavlja 512 bajtov, in se začne
s sivo v tem, da ne bomo Res imajo JPG.
>> Ampak potem smo končno zadeli blok z zvezdico.
To pomeni, da so prve štiri bajte ven tistih 512 so ena od teh dveh
zagonu zaporedja JPG.
In gremo od tam, in potem, ko en JPG konča, se začne nova.
Ne bomo nikoli imeli več siva prostor vmes.
>> Ampak, kako bomo dejansko prebral to in preberite 512 bajtov, tako da bomo lahko
Primerjava prvo mesto?
No, vrnimo se k fread, ki bo v Struktura, ki bo vsebovala
bajta, ki jo berete.
Torej boš dal tistih, ki tam -
velikost, število in potem inpointer da berete iz.
Zdaj smo želeli prebrati 512 naenkrat, in želimo to shraniti v vmesnem pomnilniku,
Jaz ga bom poklical.
>> V bistvu, bomo držite na teh 512 bajtov in ne
stvari z njim, kajne?
Mi smo bodisi bo primerjati prvi štiri bajte, ali bomo
ga preberete v, OK?
Torej podatki, kazalec bo nato služijo kot svojo pufrom
inpointer, dobro, da bo le da bo na pomnilniški kartici.
>> Nazaj na naši pomnilniške kartice shematski.
Bomo prebrali 512 bajtov naenkrat, shrani vse 512-byte blok
v buffer, ki imajo na tiste buffer, teh 512 bajtov, dokler ne vemo,
kaj, da jih ne.
Torej začetek ni nič, tako da bomo prebrali serum, ga primerjati, in
nam ne bo treba storiti ničesar s tem.
In potem smo končno zadeli zvezdo blokirati, kar pomeni, da smo že
našel svoj prvi JPG.
Torej buffer imajo sedaj bajti od tega JPG.
>> Naslednjič, ko 512 bajtov, ker oni ni zvezda blok, so tudi
del tega JPG.
Jpg in so zvezne od tam naprej, dokler ne bomo zadeli naslednjo JPG.
In potem buffer, potem ima 512 bajtov za to jpg, in
tako naprej, in tako naprej.
OK.
>> Torej, ko ste zadeli prvi zvezdico blok, prva JPG, kako vam
pravzaprav dobro, da jo odprete?
Naredimo novo JPG.
Imena datotek za JPG bodo biti v obliki, številka, številka,
number.jpg v tem, da oni poimenovali v red, v katerem se ugotovi,
se začne z 0.
>> Torej, najprej JPG, ki ga Ugotovijo, bodo 000.jpg.
Torej, verjetno dobra ideja, da bi spremljali koliko JPGs ste do sedaj našel.
Tako da je ime datoteke.
Ampak kako ste dejansko narediti to?
No, bomo uporabili Funkcija se imenuje sprintf.
Malo podobna printf, kjer lahko uporabite ograde za godala,
razen v tem primeru bo sprintf tiskanje Datoteka ven v toku
imenik, ni v terminal.
>> OK.
Torej, tukaj vidimo, da imamo naslov, char niz, ki se bo shranjevanje
Nastali niz in se peljemo v Naslov dejanskega niz z
ogrado, tako kot smo naučili narediti z printf.
Toda ta oznaka, da imam tukaj bo 2.jpg, ne 002.jpg.
Torej bom pustil na vas, da ugotovite, kako spremenite ogrado, da bi
pravilno ime.
>> OK.
Torej, ko ste potem sprintf'd lahko odpreti to datoteko, saj obstaja v
vaš imenik z fopen uporabo naslov, nato pa glede na želeni način
Če želite odpreti to datoteko prijavite
Torej sedaj, ko smo odprli nov JPG datoteko Zdaj lahko zapišemo 512 bajtov na
časa, dokler se ne najde nov JPG.
Torej, dajmo še enkrat pogledati na sintakso fwrite.
>> Vem, da bom pokazal to slide veliko, ampak jaz samo želim, da poskrbite, da
fantje ne dobijo preveč zmedeni, ker Vem, da je to zelo enostavno
pomešajo prvi in ​​zadnji argument, zlasti.
Ampak ne pozabite, da pišete iz vaš buffer v out slik datotek.
>> Zdaj, ko vem, kako napisati 512 bajti v vašo JPG datoteko, da ste
ustvaril, dobro, smo želeli ustaviti, da Proces, ko smo prišli do konca
Naš kartice, ker ne bo prišlo vse več slik je mogoče najti.
Torej vrnimo k fread enkrat več, obljubim.
fread vrne koliko kosov velikosti, velikost, so bili pripravljeni v uspešno.
Idealno bi bilo, to se bo glede na podaš v za številko, kajne?
Ker skušaš prebrati več elementov velikosti, velikosti.
Ampak, če fread ne more prebrati, da število elementov, potem pa se vrne
ne glede na število uspešno prebrali.
>> Zdaj pa ena pomembna stvar je tudi omeniti, da če uporabljate drugo datoteko I / O
Funkcija kot fgetc, da bomo tudi vrniti koliko elementov je uspešno prebral.
Kaj je uporaben o tej funkciji je da če uporabljate funkcije znotraj
stanje, se bo sama izvršiti, medtem ko določitev tega pogoja, ki je
samo res koristen.
Torej, če imate to pogoje, recimo, če fread buffer, sizeof DOG, 2,
kazalec, enaka enaka 1, ki pomeni, da bi rad, da se glasi
2 psi v tistem času.
Ampak, če fread vrne 1 namesto 2, kot je Pričakuje se, da pomeni, da je 2
psi ostanejo v moji datoteki, ampak 1.
Ampak, če se vrne 2, potem pa sem še vedno ti 2 psi znotraj mojega buffer.
>> Torej sedaj, da vam daje občutek, kako preverimo koncu datoteke, vendar
gremo skozi zdaj logiko.
Kako pravzaprav kos vsem ti elementi skupaj?
Ko smo zadeli naš prvi JPG, saj vemo, da so JPGs shranjeni
contiguously, bomo pisno dokler dosežemo konec datoteke kartice.
Vendar ne želimo, da napišete vse do takrat.
Zato je pomembno, ne samo, da smo na začetek novega JPG, ampak ali
smo že našli JPG ali ne.
>> Če je začetek novega JPG, se bomo želite zapreti našo trenutno datoteko JPG če
imamo eno odprta in odprt nov pisati v.
Če to ni začetek novega JPG, čeprav bomo obdržati isto JPG datoteko
Odpiranje in pisanje v to.
Bomo napisali naši buffer v kar JPG datoteka imamo odprto, pod pogojem, da
imamo en odprt, seveda.
Če nismo našli naš prvi JPG vendar, mi ne piše nič.
In ta proces se nadaljuje, dokler vas dosežejo konec datoteke kartice.
>> In na koncu, boste želeli, da bi prepričajte, da ste fclose koli
datoteke, ki ste fopened.
Ko ste zadovoljni s koncepti, si oglejte nekaj
psevdokoda, kar sem tu vključena.
Prva, ki jo želite odpreti datoteko kartice, in nato ponovite naslednji postopek
dokler ste dosegli Konec kartice.
Želite prebrati 512 bajtov v buffer.
Uporaba tega buffer, boste želeli preveriti ali ste na začetku
Nova JPG ali ne.
In odgovor na to vprašanje bo vplivalo na vašo upravljanje datotek -
datoteke, ki jih odprete, ki tisti pa zapreš.
>> Potem, ko ste že našli JPG?
Kako ste bili vodenje track to?
Nato pa glede na to, boste bodisi pisati v trenutni JPG, ki ga
imajo odprto, ali ne pisati na vse, ker niste našli JPG še.
Nazadnje, ko ste prišli do konca datoteka, boste želeli zapreti katerokoli
Preostali datoteke, ki jih imate odprt.
Želimo biti urejeno tukaj.
>> In s tem, ko ste izterjati vse Manjkajoče datoteke iz tega pomnilnika
kartico, ki je precej neverjetno feat.
Torej pat sebe na hrbtni strani.
Vendar pa obstaja še en element PSET, ki je tekmovanje.
Boste ugotovili, da vse slike da si opomogla, so dejansko
Slike osebja CS50 je.
Torej, če ste na kampusu ali nekje v bližini, potem si lahko slike z
osebja, in del, ki ima večina slik z uslužbencem
od svojih izterjanih Datoteke dobili super nagrado.
S tem, potem ste končali izterja PSET.
Ime je Zamyla, in to je CS50.