[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.