>> [Muzikavimo]
>> ZAMYLA CHAN: Leiskite spręsti atsigauti.
Atkurti turbūt mano mėgstamiausia PSET, ir daugiausia dėl to, manau, kad tai
tikrai, tikrai cool.
Iš esmės, jums suteikta atmintį kartoteka, kurioje
nuotraukos buvo ištrintas.
Bet ką jūs ketinate padaryti, tai susigrąžinti juos visus.
>> Gerai.
Taigi tai tikrai įdomus, bet gal šiek tiek bauginanti, nes jūs
teikiama tuščia C failą ir Jūs turite užpildyti jį in
Gerai, kad galime padalyti į valdomas dalis.
Jūs norite atidaryti atminties kortelės failas.
Tai atrodo gana paprasta.
Tada rasti pradžią iš JPG failą.
Visi šioje atminties failai kortelė bus JPG.
Tada, kai jums rasti pradžioje, jūs ketinate atidaryti naują JPG, kad
yra, pavyzdžiui, sukurti JPG, ir rašyti 512 baitas metu iki naujos JPG yra
rasti, ir baigiant programą, kai aptikti failo pabaigą.
>> Taigi pirmieji žingsniai Pirmasis atidaryti atminties kortelės failas.
Bet žinote, tai jau ir yra failą I / O funkcija, kuri vyksta
būti labai naudinga.
Gerai.
Taigi, kas yra JPG?
Nes mes turime pradžioje jį.
Na, JPG, kaip bitų žemėlapiai, yra tik sekos baitų.
Laimei, kiekvienas JPG prasideda arba 0xFF, 0xd8, 0xFF, 0xe0, viena seka
baitų, arba kitą seka baitai.
>> Taigi tie keturi baitai rodo iš JPG pradžia.
Niekas kitas, kaip šių dviejų derinių keturių baitų.
Ir laimei, mums, dar vienas faktas, kad mes gali pasinaudoti, kad kiekvienas
JPG saugomi side-by-side atminties kortelėje.
Aš reprezentavo struktūra atminties kortelė schematiškai apie tai
stumkite čia.
Čia kiekvienas kvadratinis, kiekvienas stačiakampis, yra 512 baitų, ir jis pradeda
su į, kad pilka mes neturime tikrai JPG.
>> Bet tada mes pagaliau paspauskite blokas su žvaigžde.
Tai reiškia, kad pirmieji keturi baitai out iš tų 512 yra vienas iš tų dviejų
pradedant sekas JPG.
Ir mes einame iš ten, ir tada, kai vienas JPG baigiasi, šalia vienas prasideda.
Mes ne kada nors, bet daugiau pilka erdvė tarp.
>> Bet kaip mes iš tikrųjų perskaityti šią informaciją, ir skaityti 512 baitų, kad mes galime padaryti
palyginimas pirmoji vieta?
Na, grįžkime į fread, kuris priima į struct, kurioje bus
baitai, kad jūs skaitote.
Taigi, jūs ketinate daryti tie ten -
dydis, numeris, o tada inpointer kad jūs skaitote iš.
Dabar norime tuo metu 512 skaityti, ir mes norime išsaugoti tai buferyje,
Aš ruošiuosi jį pavadinti.
>> Iš esmės, mes ketiname turėti ant tų 512 baitų ir padaryti
viskas su juo, tiesa?
Mes arba ketina palyginti pirmas keturi baitai, ar mes ketiname
skaityti jį, gerai?
Taigi duomenų žymeklis bus tada tarnauti kaip jūsų buferio ir
inpointer, gerai, kad tiesiog vyksta būti jūsų atminties kortelė.
>> Atgal į mūsų atminties kortelės schema.
Mes ketiname skaityti 512 baitų metu, saugoti kiekvieną 512 baitų bloką
į buferį, įsikibęs tų buferio, tuos 512 baitų, kol mes žinome,
ką daryti juos.
Taigi pradžia yra nieko, todėl mes skaityti buferis, palyginti ir
mums nereikės nieko daryti su juo.
Ir tada, pagaliau nukentėjo žvaigždę blokuoti, tai reiškia, kad mes
rasti savo pirmąjį JPG.
Taigi buferis dabar turi baitais nuo tos JPG.
>> Kitą kartą 512 baitai, nes jie ne žvaigždė blokas, taip pat
dalis šios JPG.
Ir JPG yra nuolat iš ten ant visų, kol mes Hit kitą JPG.
Ir tada buferis tada turi 512 baitų to JPG ir
tt, ir pan.
Gerai.
>> Taigi, kai paspausite pirmasis žvaigžde blokas, pirmasis JPG, kaip jūs
iš tikrųjų, gerai, jį atidaryti?
Kurkime naują JPG.
Už JPG varduose ketinate būti tokio formato, numeris, skaičius,
number.jpg, nes jie įvardyti tvarka, kuria jie nustatė,
pradedant 0.
>> Taigi pirmasis JPG, kad jūs rasti bus 000.jpg.
Taigi, tikriausiai gera idėja sekti , kiek JPG radote šiol.
Štai failo pavadinimas.
Bet kaip jūs iš tikrųjų padaryti, kad?
Na, mes ketiname naudoti funkcija vadinama sprintf.
Šiek tiek panašus į printf, kur galite naudoti vietos rezervavimo styginiams
išskyrus šiuo atveju sprintf bus atspausdinti bylą iš į srovę
katalogas, o ne į terminalą.
>> Gerai.
Taigi čia matome, kad turime pavadinimą, char masyvas, kuris bus išsaugoti
atstojamoji eilutę, ir mes pereiname į pavadinimas faktinio eilutės su
vietos rezervavimo ženklų, kaip mes išmoko daryti su printf.
Bet šis kodas, kad turiu čia duos 2.JPG, o ne 002.JPG.
Taigi aš palieku jums išsiaiškinti, kaip pakeisti vietos rezervavimo ženklą, kad
teisingas pavadinimas.
>> Gerai.
Taigi, kai jūs sprintf'd tada galite atidaryti tą failą, nes jis egzistuoja
savo katalogą, su fopen, naudojant pavadinimas, o tada kokia režimas norite
atidaryti tą failą in
Taigi dabar, kad mes atidarėme naują JPG failą, dabar mes galime parašyti 512 baitų ne
laiko, kol nauja JPG nerasta.
Taigi leiskite dar kartą peržiūrėti prie fwrite sintaksė.
>> Aš žinau, kad aš rodau šį slide daug, bet aš tik noriu įsitikinti, kad
vaikinai negauna pernelyg supainioti, nes Žinau, kad tai labai lengva
išmaišyti pirmas ir paskutinis argumentas, visų pirma.
Bet atsiminkite, kad rašote iš Jūsų buferio į iš failų vaizdų.
>> Dabar, kad žinote, kaip rašyti 512 baitų į jūsų JPG failą, kad jūs
sukurta gerai, mes norime sustabdyti, kad procesas, kai mes pasiekė pabaigos
mūsų skyriaus, nes ten nebus bet daugiau nuotraukų galima rasti.
Taigi, grįžkime prie fread dar kartą, aš pažadu.
fread grįžta kaip daug daiktų dydžio, dydis, buvo pasirengę sėkmingai.
Geriausia, jei tai bus kokia pereisite už skaičius, tiesa?
Kadangi jūs bandote skaityti numeris elementų dydžio, dydžio.
Bet jei fread negali skaityti, kad skaičius elementų, tada jis bus grįžti
kokia skaičius tai skaityti sėkmingai.
>> Dabar vienas svarbus dalykas, reikia pažymėti, kad jei jūs naudojate kitą failą I / O
funkcionuoja kaip fgetc, tai bus taip pat grįžti kiek prekių ji skaityti sėkmingai.
Kas naudinga apie šią funkciją yra kad jei jūs naudojate funkcijas viduje
sąlyga, kad bus įvykdyti pati, o Nustatant šią sąlygą, kuri yra
tiesiog tikrai naudinga.
Taigi, jei turite tai sąlygos, tarkim, jei fread buferis, sizeof ŠUNŲ, 2,
rodyklė lygu lygu 1, ty tai reiškia, kad aš norėčiau skaityti
2 šunys tuo metu.
Bet jei fread grąžina 1, o ne 2, kaip Tikimasi, kad tai reiškia, kad yra 2
šunys liko mano byla, o 1.
Bet jei jis grąžina 2, tada dar turiu tie 2 šunys viduje mano buferį.
>> Taigi dabar, kad suteikia jums, kaip prasminga patikrinti failo pabaigoje, tačiau
eikime per dabar logika.
Kaip mes faktiškai suvesti visus iš šių elementų kartu?
Kai mes hit savo pirmąjį JPG, nes mes žinome, kad JPG saugomos
Kaimynystėje, mes rašyti iki mes pasiekti kortelės failo pabaigą.
Bet mes nenorime rašyti nors iki tol.
Todėl labai svarbu, kad ne tik mes ne naujos JPG pradžia, tačiau ar
mes jau rado JPG, ar ne.
>> Jei Tai naujos JPG pradžia, mes norite uždaryti dabartinę mūsų JPG failą, jei
mes turime vieną atidaryti ir atvira nauja rašyti į.
Jei tai nėra naujos JPG pradžia, nors mes išlaikyti tą patį failą JPG formatu
atidaryti ir rašyti į tą.
Mes rašome buferio į kuri JPG failą turime atvira, su sąlyga, kad
mes turime vieną atvirą, žinoma.
Jei mes ne rasti mūsų pirmąjį JPG dar, mes nieko nerašo.
Ir šis procesas tęsiasi tol, kol jums pasiekia kartotekoje pabaigą.
>> Ir, pagaliau, jūs norite įsitikinti, įsitikinkite, kad jums fclose bet
failus, kad jūs fopened.
Kai esate patenkintas sąvokos, atsižvelgti į kai atrodo
Pseudocode, o aš čia įtraukti.
Pirma, jūs norite atidaryti kortelės failą, ir tada pakartokite šį procesą
kol jūs pasiekėte kortelės galas.
Jūs norite perskaityti 512 baitų į buferį.
Naudojant tą buferį, jūs norite patikrinti ar jūs ne iš pradžios
nauja JPG, ar ne.
Ir atsakymas į šį klausimą bus įtakos jūsų failų valdymo -
kurie failai atidaromi, kurios tie, kurie uždaryti.
>> Tada jūs jau rado JPG?
Kaip jums buvo išlaikyti kelio apie tai?
Tada, priklausomai nuo to, jūs arba rašyti į dabartinę JPG, kad jūs
turi atidaryti, ar ne rašyti ne visi, nes jums nepavyko rasti JPG dar.
Galiausiai, kai jūs pasiekėte galą failą, jūs norite uždaryti bet
Likusi failus, kad jūs turite atidaryti.
Mes norime būti tvarkinga čia.
>> O, kad jūs atsigavo visi trūkstamus failus iš tos atminties
kortelės, kuri yra gana nuostabų feat.
Taigi paglostyti save ant nugaros.
Bet yra dar vienas elementas PSET, kuris yra konkursas.
Jūs pamatysite, kad visas nuotraukas kad jūs išieškoti iš tikrųjų
nuotraukos CS50 darbuotojų.
Taigi, jei esate miesteliu ar kažkur šalia, tada jūs galite fotografuoti su
darbuotojai ir skyrių, kuris turi dauguma nuotraukų su darbuotojais
iš jų atgautų rinkmenų bus gauti nuostabus prizas.
Su, kad tada, kai baigsite susigrąžinti PSET.
Mano vardas Zamyla, ir tai yra CS50.