[MUSIC PLAYBACK] ZAMYLA CHAN: Poďme riešiť obnoviť. Obnovenie je asi moje najobľúbenejšie pset, a hlavne preto, že si myslím, že je to naozaj, naozaj cool. V podstate ste daný pamäť kartotéka, v ktorom obrázky boli odstránené. Ale to, čo budete urobiť, je obnoviť ich všetky. OK. Takže je to naozaj vzrušujúce, ale možno trochu zastrašujúce, pretože si vzhľadom k prázdnej C súbor a musíte ho vyplniť palcov OK, takže poďme rozbiť to do zvládnuteľných častí. Budete chcieť otvoriť súborov na pamäťovej karte. To sa zdá dosť jednoduché. Potom, nájsť začiatok z JPG obrázok. Všetky súbory z tejto pamäti Karta sa bude JPGs. Potom, čo nájdete na začiatok, sa chystáte otvoriť nové jpg, že je, rovnako ako vytvoriť jpg, a napísať 512 byte v čase, kým nová JPG je nájdené, a ukončenie programu, po zistíte koniec súboru. Takže prvé kroky Prvý z nich je otvoriť súborov na pamäťovej karte. Ale viete, to už, a tam je súbor I / O funkcie, ktorá sa bude ukázať ako veľmi užitočné. OK. Takže aké sú JPGs? Vzhľadom k tomu, že potrebujeme, aby na začiatku to. No, JPGs, rovnako ako bitové mapy, sú len sekvencie bajtov. Našťastie, každý JPG začína buď 0xFF, 0xd8, 0xFF, 0xE0, jedna sekvencia bytov, alebo iný postupnosť bajtov. Takže tie štyri bajty označujú začiatok JPG. Nikto iný ako tie dve kombinácie zo štyroch bajtov. A našťastie pre nás, iného skutočnosť, že sme môžu využiť je, že každý JPG je uložené vedľa seba na pamäťovej karte. Ja som reprezentoval štruktúru Pamäťová karta schematicky na to posuňte tu. Tu sa každý štvorcový, každý obdĺžnik, predstavuje 512 bytov, a to začína so sivou v tom, čo robíme, nie je mať naozaj jpg. Ale potom sme sa konečne hit blok s hviezdou. To znamená, že prvé štyri bajty z z tých 512 ar jeden z tých dvoch začína sekvencií a JPG. A pôjdeme tam, a potom ešte raz jeden JPG končí, ďalšie začína. Nemáme vôbec mať viac šedý priestor medzi nimi. Ale ako vlastne čítať to, a čítať 512 bajtov, takže môžeme Nákupný prvé miesto? Dobre, vráťme sa k fread, ktoré sa v struct, ktorý bude obsahovať bajtov, ktoré čítate. Takže sa chystáte dať ty tam - veľkosť, počet, a potom inpointer že čítate z Teraz chceme čítať 512 v čase, a chceme uložiť to v pamäti, Chystám sa to nazvať. V podstate, budeme držať na tých 512 bajtov, a to čo s ním, že jo? Sme buď bude porovnávať prvý štyri bajty, alebo budeme prečítajte si to v, OK? Takže ukazovateľ dáta budú potom slúži ako vyrovnávacia pamäť, a inpointer, dobre, že to len tak byť pamäťová karta. Späť k nášmu pamäťovú kartu schémy. Budeme čítať 512 bajtov v dobe, uloženie každej 512 bajtov blok do vyrovnávacej pamäti, drží na tých vyrovnávacej pamäti, tie 512 bajtov, kým nebudeme vedieť presne, čo robiť. Takže na začiatku nie je nič iné, tak budeme čítať vyrovnávacia pamäť, porovnať, a nebudeme musieť robiť nič s ním. A potom sme sa konečne trafil hviezdu blok, čo znamená, že máme našli prvý jpg. Takže vyrovnávacia teraz držať bajtov z tohto formátu JPG. Nabudúce 512 bajtov, pretože sú Nie je hviezda blok, sú tiež Súčasťou tohto formátu JPG. A JPGs sú spojité odtiaľ ďalej, až sme narazili na ďalšie jpg. A potom vyrovnávacia pamäť potom platí 512 bajtov pre tento JPG, a tak ďalej, a tak ďalej. OK. Takže akonáhle stlačíte prvou hviezdou blok, prvý JPG, ako si v skutočnosti, dobre, otvorte ju? Poďme si urobiť nový jpg. Názvy súborov pre JPG budú byť vo formáte, číslo, číslo, number.jpg, v tom, že oni sú uvedení v poradí, v ktorom sa nachádzajú, začína pri teplote 0 °. Takže prvý JPG, ktorý tu bude 000.jpg. Takže, asi dobrý nápad sledovať koľko JPGs si našiel tak ďaleko. Tak to je názov súboru. Ale ako si vlastne robiť, že? No, budeme používať funkcia s názvom sprintf. Trochu podobná printf, kde môžete použiť zástupné znaky pre sláčiky, výnimkou v tomto prípade, bude sprintf tlačiť súbor sa do prúdu adresára, nie do terminálu. OK. Takže tu vidíme, že máme titul, char pole, ktoré bude ukladať Výsledný reťazec, a míňame v názov aktuálneho reťazca s symbol, rovnako ako sme naučil robiť s printf. Ale tento kód, ktorý som tu dá 2.jpg, nie 002.jpg. Takže nechám na vás, aby ste zistili, ako sa zmeniť zástupný symbol, aby správny názov. OK. Takže akonáhle ste sprintf'd potom môžete tento súbor otvoriť, pretože existuje v adresár, s fopen, pomocou titul, a potom, čo režim chcete otvoriť tento súbor palcov Takže teraz, že sme otvorili novú JPG súboru, Teraz môžeme napísať 512 bajtov na čas, kým nie je nájdený nový JPG. Takže poďme sa ešte pozrieť v syntaxi fwrite. Viem, že som ukazovať túto priečok veľa, ale ja len chcem, aby sa ubezpečil, že vy nie príliš zmätený, pretože Viem, že je to veľmi jednoduché premiešať prvý a posledný Argument, najmä. Ale pamätajte, že píšete z Váš vyrovnávacej pamäte do von obrazu súborov. Teraz, keď viete, ako písať 512 bajty do JPG súboru, ktorý ste vytvorenie dobre, chceme zastaviť, že proces, akonáhle sme došli na koniec naše karty, pretože nebude žiadne ďalšie obrázky, ktoré majú byť nájdené. Takže poďme späť k fread ešte raz, sľubujem. fread vracia, koľko položiek veľkosti, veľkosť, boli pripravení úspešne. V ideálnom prípade to bude čokoľvek odovzdáte na číslo, nie? Vzhľadom k tomu, že sa snažíte čítať čísla prvkov o veľkosti, veľkosti. Ale ak fread nie je schopný čítať, že počet prvkov, potom sa vrátim bez ohľadu na počet úspešne čítať. Teraz jedna dôležitá vec k poznámke je že ak budete používať iný súbor I / O funkcie ako fgetc, bude to tiež vrátiť koľko položiek sa úspešne čítať. Čo je užitočné o tejto funkcii je že ak budete používať funkcie vnútri podmienka, bude to vykonávať sám, zatiaľ čo , Ktorým sa stanovuje, že podmienky, ktoré je len naozaj užitočné. Takže ak máte tento podmienok, povedzme, ak fread buffer, sizeof PES, 2, ukazovateľ, rovná sa rovná 1, že Znamená to, že by som chcel čítať 2 psi v tej dobe. Ale ak fread vracia 1 miesto 2 ako Očakáva sa, to znamená, že tam sú 2 psi opustil v mojom súbore, ale 1. Ale ak sa vráti 2, potom som ešte tieto dva psy vnútri mojej pamäti. Takže teraz, že vám dáva pocit, ako sa kontrola na koniec súboru, ale poďme prejsť teraz logiku. Ako sa vlastne poskladať všetky z týchto prvkov dohromady? Akonáhle sa dostaneme našu prvú jpg, pretože vieme, že JPGs sú uložené súvisle, budeme písať, kým dôjdeme na koniec súboru kariet. Ale my nechceme písať niečo do tej doby. Takže je to dôležité, a to nielen, že sme na Začiatok nového formátu JPG, ale to, či sme už našli jpg, alebo nie. Ak je to začiatok nového formátu JPG, budeme chcete ukončiť našu súčasnú JPG súbor, ak máme jeden otvorený a otvorené nová písať do. Ak to nie je začiatok novej JPG, keď budeme držať rovnaké JPG súbor otvoriť a napísať do toho. Budeme písať svoje vyrovnávacej pamäti do ktorejkoľvek Súbor JPG máme otvorené, za predpokladu, že máme jeden voľný, samozrejme. Ak sme nenašli náš prvý jpg Zatiaľ sme nepíšte nič. A tento proces pokračuje, kým dostanete na koniec súboru kariet. A konečne, budete chcieť, aby sa Uistite sa, že ste fclose akýkoľvek súbory, ktoré ste fopened. Akonáhle ste spokojní s koncepty, pozrite sa na niektoré pseudokódu, ktorý som tu zahrnuté. Po prvé, budete chcieť otvoriť súbor kariet, a potom opakujte nasledujúci postup kým ste dosiahli end karty. Ak chcete čítať 512 bajtov do vyrovnávacej pamäte. Pomocou tejto vyrovnávacej pamäti, budete chcieť skontrolovať, či už ste na začiatku nové JPG alebo nie. A odpoveď na túto otázku bude mať vplyv na správu súborov - súbory, ktoré ste otvorení, ktoré ty si zatvorte. Potom ste už našli jpg? Ako ste boli vedení stopa, že? Potom, v závislosti na tom, budete si musieť vybrať buď napísať do aktuálneho formátu JPG, ktorý majú otvorený, alebo nie písať to vôbec, pretože ste nenašli jpg ešte. Nakoniec, akonáhle ste dosiahli konca súbor, budete chcieť ukončiť akúkoľvek Zostávajúce súbory, ktoré máte otvorené. Chceme byť upratané tu. A s tým, že ste späť všetky chýbajúce súbory z tejto pamäti Karta, ktorá je docela úžasný výkon. Takže pat si na chrbát. Ale je tu ešte jeden prvok, pset, čo je súťaž. Zistíte, že všetky obrázky že ste späť, sú v skutočnosti obrázky zamestnancov CS50 je. Takže ak ste na akademickej pôde alebo niekde v blízkosti, potom môžete fotiť s zamestnancami, a časť, ktorá má väčšina obrázkov s pracovníkmi zo svojich získaných súbory získať úžasné ceny. S tým, potom ste skončil obnoviť pset. Volám sa Zamyla, a to je CS50.