[MUSIC PŘEHRÁVÁNÍ] ZAMYLA CHAN: Pojďme řešit obnovit. Obnovení je asi moje nejoblíbenější pset, a hlavně proto, že si myslím, že je to opravdu, opravdu cool. V podstatě jste daný paměť kartotéka, ve kterém obrázky byly odstraněny. Ale to, co budete udělat, je obnovit je všechny. OK. Takže je to opravdu vzrušující, ale možná trochu zastrašující, protože jsi vzhledem k prázdné C soubor a musíte ho vyplnit palců OK, takže pojďme rozbít to do zvládnutelných částí. Budete chtít otevřít souborů na paměťové kartě. To se zdá dost jednoduché. Poté, najít začátek z JPG obrázek. Všechny soubory z této paměti Karta se bude JPGs. Poté, co najdete na začátek, se chystáte otevřít nové jpg, že je, stejně jako vytvořit jpg, a napsat 512 byte v době, dokud nová JPG je nalezeno, a ukončení programu, po zjistíte konec souboru. Takže první kroky První z nich je otevřít souborů na paměťové kartě. Ale víte, to už, a tam je soubor I / O funkce, která se bude ukázat jako velmi užitečné. OK. Takže jaké jsou JPGs? Vzhledem k tomu, že potřebujeme, aby na začátku to. No, JPGs, stejně jako bitové mapy, jsou jen sekvence bajtů. Naštěstí, každý JPG začíná buď 0xff, 0xd8, 0xff, 0xE0, jedna sekvence bytů, nebo jiný posloupnost bajtů. Takže ty čtyři bajty označují začátek JPG. Nikdo jiný než ty dvě kombinace ze čtyř bajtů. A naštěstí pro nás, jiné skutečnost, že jsme mohou využít je, že každý JPG je uloženo vedle sebe na paměťové kartě. Já jsem reprezentoval strukturu Paměťová karta schematicky na to posuňte zde. Zde se každý čtvereční, každý obdélník, představuje 512 bytů, a to začíná s šedou v tom, co děláme, není mít opravdu jpg. Ale pak jsme se konečně hit blok s hvězdou. To znamená, že první čtyři bajty z z těch 512 ar jeden z těch dvou začíná sekvencí a JPG. A půjdeme tam, a pak ještě jednou jeden JPG končí, další začíná. Nemáme vůbec mít víc šedý prostor mezi nimi. Ale jak vlastně číst to, a číst 512 bajtů, takže můžeme Porovnání první místo? Dobře, vraťme se k fread, které se v struct, který bude obsahovat bajtů, které čtete. Takže se chystáte dát ty tam - velikost, počet, a pak inpointer že čtete z. Nyní chceme číst 512 v čase, a chceme uložit to v paměti, Chystám se to nazvat. V podstatě, budeme držet na těch 512 bajtů, a to co s ním, že jo? Jsme buď bude srovnávat první čtyři bajty, nebo budeme přečtěte si to v, OK? Takže ukazatel data budou poté slouží jako vyrovnávací paměti, a inpointer, dobře, že to jen tak být paměťová karta. Zpět k našemu paměťovou kartu schématu. Budeme číst 512 bajtů v době, uložení každé 512 bajtů blok do vyrovnávací paměti, drží na těch vyrovnávací paměti, ty 512 bajtů, dokud nebudeme vědět přesně, co dělat. Takže na začátku není nic jiného, ​​tak budeme číst vyrovnávací paměť, porovnat, a nebudeme muset dělat nic s ním. A pak jsme se konečně trefil hvězdu blok, což znamená, že máme našli první jpg. Takže vyrovnávací nyní držet bajtů z tohoto formátu JPG. Příště 512 bajtů, protože jsou Není hvězda blok, jsou také Součástí tohoto formátu JPG. A JPGs jsou spojité odtud dál, až jsme narazili na další jpg. A pak vyrovnávací paměť pak platí 512 bajtů pro tento JPG, a tak dále, a tak dále. OK. Takže jakmile stisknete první hvězdou blok, první JPG, jak si ve skutečnosti, dobře, otevřete ji? Pojďme si udělat nový jpg. Názvy souborů pro JPG budou být ve formátu, číslo, číslo, number.jpg, v tom, že oni jsou uvedeni v pořadí, ve kterém se nacházejí, začíná při teplotě 0 °. Takže první JPG, který zde bude 000.jpg. Takže, asi dobrý nápad sledovat kolik JPGs jsi našel tak daleko. Tak to je název souboru. Ale jak si vlastně dělat, že? No, budeme používat funkce s názvem sprintf. Trochu podobná printf, kde můžete použít zástupné znaky pro smyčce, výjimkou v tomto případě, bude sprintf tisknout soubor se do proudu adresáře, ne do terminálu. OK. Takže tady vidíme, že máme titul, char pole, které bude ukládat Výsledný řetězec, a míjíme v název aktuálního řetězce s symbol, stejně jako jsme naučil dělat s printf. Ale tento kód, který jsem zde dá 2.jpg, ne 002.jpg. Takže nechám na vás, abyste zjistili, jak se změnit zástupný symbol, aby správný název. OK. Takže jakmile jste sprintf'd pak můžete tento soubor otevřít, protože existuje v adresář, s fopen, pomocí titul, a poté, co režim chcete otevřít tento soubor palců Takže teď, že jsme otevřeli novou JPG souboru, Nyní můžeme napsat 512 bajtů na čas, dokud není nalezen nový JPG. Takže pojďme se ještě podívat v syntaxi fwrite. Vím, že jsem ukazovat tuto příček hodně, ale já jen chci, aby se ujistil, že vy ne příliš zmatený, protože Vím, že je to velmi jednoduché promíchat první a poslední Argument, zejména. Ale pamatujte, že píšete z Váš vyrovnávací paměti do ven obrazu souborů. Nyní, když víte, jak psát 512 bajty do JPG souboru, který jste vytvoření dobře, chceme zastavit, že proces, jakmile jsme došli na konec naše karty, protože nebude žádné další obrázky, které mají být nalezeny. Takže pojďme zpět k fread ještě jednou, slibuju. fread vrací, kolik položek velikosti, velikost, byli připraveni úspěšně. V ideálním případě to bude cokoliv předáte na číslo, ne? Vzhledem k tomu, že se snažíte číst čísla prvků o velikosti, velikosti. Ale pokud fread není schopen číst, že počet prvků, pak se vrátím bez ohledu na počet úspěšně číst. Teď jedna důležitá věc k poznámce je že pokud budete používat jiný soubor I / O funkce jako fgetc, bude to také vrátit kolik položek se úspěšně číst. Co je užitečné o této funkci je že pokud budete používat funkce uvnitř podmínka, bude to provádět sám, zatímco , kterým se stanoví, že podmínky, které je jen opravdu užitečné. Takže pokud máte tento podmínek, řekněme, pokud fread buffer, sizeof PES, 2, ukazatel, rovná se rovná 1, že Znamená to, že bych chtěl číst 2 psi v té době. Ale pokud fread vrací 1 místo 2 jako Očekává se, to znamená, že tam jsou 2 psi opustil v mém souboru, ale 1. Ale pokud se vrátí 2, pak jsem ještě tyto dva psi uvnitř mé paměti. Takže teď, že vám dává pocit, jak se kontrola na konec souboru, ale pojďme projít nyní logiku. Jak se vlastně poskládat všechny z těchto prvků dohromady? Jakmile se dostaneme naši první jpg, protože víme, že JPGs jsou uloženy souvisle, budeme psát, dokud dojdeme na konec souboru karet. Ale my nechceme psát něco do té doby. Takže je to důležité, a to nejen, že jsme na Začátek nového formátu JPG, ale to, zda jsme již našli jpg, nebo ne. Pokud je to začátek nového formátu JPG, budeme chcete ukončit naši současnou JPG soubor, pokud máme jeden otevřený a otevřené nová psát do. Pokud to není začátek nové JPG, když budeme držet stejné JPG soubor otevřít a napsat do toho. Budeme psát své vyrovnávací paměti do kterékoli Soubor JPG máme otevřené, za předpokladu, že máme jeden volný, samozřejmě. Pokud jsme nenašli náš první jpg Zatím jsme nepište nic. A tento proces pokračuje, dokud dostanete na konec souboru karet. A konečně, budete chtít, aby se Ujistěte se, že jste fclose jakýkoli soubory, které jste fopened. Jakmile jste spokojeni s koncepty, podívejte se na některé pseudokódu, který jsem zde zahrnuty. Za prvé, budete chtít otevřít soubor karet, a pak opakujte následující postup dokud jste dosáhli end karty. Chcete-li číst 512 bajtů do vyrovnávací paměti. Pomocí této vyrovnávací paměti, budete chtít zkontrolovat, ať už jste na začátku nové JPG nebo ne. A odpověď na tuto otázku bude mít vliv na správu souborů - soubory, které jste otevření, které ty si zavřete. Pak jste již našli jpg? Jak jste byli vedení stopa, že? Pak, v závislosti na tom, budete si muset vybrat buď napsat do aktuálního formátu JPG, který mají otevřený, nebo ne psát to vůbec, protože jste nenašli jpg ještě. Nakonec, jakmile jste dosáhli konce soubor, budete chtít ukončit jakékoliv Zbývající soubory, které máte otevřené. Chceme být uklizené zde. A s tím, že jste zpět všechny chybějící soubory z této paměti Karta, která je docela úžasný výkon. Takže pat si na záda. Ale je tu ještě jeden prvek, pset, což je soutěž. Zjistíte, že všechny obrázky že jste zpět, jsou ve skutečnosti obrázky zaměstnanců CS50 je. Takže pokud jste na akademické půdě nebo někde v blízkosti, pak můžete fotit s zaměstnanci, a část, která má většina obrázků s pracovníky ze svých získaných soubory získat úžasné ceny. S tím, pak jste skončil obnovit pset. Jmenuji se Zamyla, a to je CS50.