[Musiikki soi] ZAMYLA Chan: Katsotaanpa puuttua takaisin. Recover on luultavasti suosikkini PSET, ja lähinnä koska mielestäni se on todella, todella siistiä. Periaatteessa olet antanut muisti kortisto, jossa kuvat on poistettu. Mutta mitä aiot tehdä, on palauttaa ne kaikki. OK. Joten se on todella jännittävää, mutta ehkä vähän uhkaava, koska olet annetaan tyhjä C-tiedosto ja sinun täytyy täyttää sen sisään OK, joten katsotaanpa rikkoa tätä hallittaviin osiin. Sinun kannattaa avata muistikortti tiedostojen. Tämä vaikuttaa helpolta. Sitten löytää alku JPG-kuvan. Kaikki tiedostot tämä muisti kortti aiotaan JPGs. Sitten, kun löydät alussa, aiot avata uuden JPG, että on, kuten, luoda JPG, ja kirjoittaa 512 tavu kerrallaan, kunnes uusi JPG on löytyi, ja päättyy ohjelman kerran havaitset tiedoston loppuun. Joten ensimmäiset askeleet ensin on avata muistikortti tiedostojen. Mutta te tiedätte tämän jo, ja siellä on tiedoston I / O-toiminto, joka tulee osoittautua erittäin hyödyllistä. OK. Joten mitä ovat JPGs? Koska meidän on alussa se. No, JPGs, kuten vähän karttoja, ovat vain sekvenssit tavua. Onneksi jokainen JPG alkaa joko 0xff, 0xd8, 0xFF, 0XE0, yksi sekvenssi tavujen tai muun sarja tavuja. Joten ne neljä tavua ilmaisevat alku JPG. Ei ole muita kuin nämä kaksi yhdistelmät neljä tavua. Ja onneksi meille, toinen tosiasia, että me voi hyödyntää on, että jokainen JPG on tallennettu side-by-side muistikortilla. Olen edusti rakenne muistikortti kaavamaisesti tästä dia täällä. Täällä jokainen neliö, joka suorakulmion, edustaa 512 tavua, ja se alkaa harmaa, että emme todella on JPG. Mutta sitten vihdoin osui lohko, jossa on tähti. Tämä tarkoittaa, että neljä ensimmäistä tavua ulos näistä 512 on yksi niistä kahdesta alkaen sekvenssit JPG. Ja me mennä sieltä, ja sitten kerran yksi JPG päättyy, seuraava alkaa. Meillä ei koskaan ole enempää harmaa tilaa siltä väliltä. Mutta miten voimme todella lukea tätä, ja Lue 512 tavua, jotta voimme tehdä Vertailun ensimmäinen paikka? No, mennään takaisin fread, joka vie struct, joka sisältää tavua, että luet. Joten aiot laittaa niitä siellä - koko, lukumäärä, ja sitten inpointer että luet alkaen. Nyt haluamme lukea 512 kerrallaan, ja haluamme säilyttää tämän puskurissa, Aion kutsua sitä. Periaatteessa aiomme pitää asemia 512 tavua ja tehdä asioita sen kanssa, eikö? Me joko menossa verrata ensin neljä tavua tai aiomme lukea se, OK? Joten sitten datan osoitin sitten toimii teidän puskuri, ja inpointer, hyvin, että on juuri menossa olla muistikortille. Takaisin meidän muistikortille kaavamainen. Aiomme lukea 512 tavua kerrallaan, tallentamiseen jokaisen 512 tavun lohko puskuriin, pitää kiinni ne, puskuri, nämä 512 tavua, ennen kuin tiedämme mitä tehdä niille. Joten alussa ei ole mitään, niin me lukea puskuri, verrata sitä, ja meidän ei tarvitse tehdä mitään sen kanssa. Ja sitten vihdoin osui tähti lohko, mikä tarkoittaa, että olemme löytyi ensimmäinen JPG. Joten puskuri nyt pitää tavuja että JPG. Seuraavan kerran 512 tavua, koska he ei tähti lohko, ovat myös osa tätä JPG. Ja JPGs ovat jatkuvia sieltä sisään, kunnes osuimme ensi JPG. Ja sitten puskuri sitten omistaa 512 tavua, joka JPG, ja niin edelleen, ja niin edelleen. OK. Joten kun osut ensin tähdillä palkittu lohko, ensin JPG, miten te todella hyvin, avaa se? Tehdään uusi JPG. Tiedostonimiä JPG menossa oltava muodossa, numero, lukumäärä, number.jpg, että he nimetty siinä järjestyksessä, jossa ne esiintyvät, alkaen 0. Joten ensimmäinen JPG, että olet löytää tullaan 000.jpg. Joten, luultavasti hyvä idea seurata kuinka monta JPGs olet löytänyt tähän mennessä. Niin, että tiedoston nimi. Mutta miten voit itse tehdä, että? No, me aiomme käyttää toiminto nimeltään sprintf. Hieman samanlainen printf, jossa voit käyttää paikanpitäjinä jouset, paitsi että tässä tapauksessa sprintf tulostaa tiedoston ulos nykyisestä hakemistoon, ei terminaaliin. OK. Joten tässä me näemme, että meillä on otsikko, char array, joka tallentaa tuloksena merkkijono, ja me kulkea otsikko todellinen merkkijonon paikanvaraajassa aivan kuten olemme oppinut tekemistä printf. Mutta tämä koodi, joka minulla on täällä antaa 2.jpg, ei 002.jpg. Joten Jätän voit selvittää, miten muokata paikkamerkki tehdä oikea nimi. OK. Joten kun olet sprintf'd sitten voit avaa tiedoston, koska se on olemassa hakemistoon, jossa fopen käyttäen otsikko, ja sitten mitä haluamasi tila avata tiedoston sisään Joten nyt olemme avannut uuden JPG-tiedosto, Nyt voimme kirjoittaa 512 tavua aikaa, kunnes uusi JPG löytyy. Joten katsotaanpa katsomaan uudelleen klo syntaksi fwrite. Tiedän, että näytän tämän dian paljon, mutta haluan vain varmistaa, että te älä mene liian sekava, koska Tiedän, että se on erittäin helppo sekoittaa ensimmäinen ja viimeinen argumentti, erityisesti. Mutta muista, että olet kirjallisesti teidän puskuri pois tiedostojen näkymiä. Nyt kun tiedät miten kirjoittaa 512 tavut omalle JPG-tiedosto, joka olet luotu, hyvin, haluamme lopettaa että prosessia, kun olemme saavuttaneet lopussa Meidän kortti, koska siellä ei ole enempää kuvia löytyy. Joten mennään takaisin fread kerran, lupaan. fread palauttaa kuinka monta kohdetta koosta, koko, valmistuivat onnistuneesti. Ihannetapauksessa tämä tulee olemaan mitä tahansa ohitat numeron, eikö? Koska yrität lukea numeron elementtien koon, kokoa. Mutta jos fread ei voi lukea, että alkioiden lukumäärä, niin se tulee palauttaa mitä numero se lukenut onnistuneesti. Nyt yksi tärkeä asia huomata on että jos käytät toisen tiedoston I / O toimivat kuten fgetc, se tulee myös palata kuinka monta kohdetta se lukea onnistuneesti. Mitä hyötyä tästä toiminnosta on että jos käytät toimintoja sisällä kunnossa, se tulee suorittaa itse taas määritetään, että ehto, joka on vain todella hyödyllinen. Joten jos sinulla on tämä olosuhteissa, vaikkapa jos fread puskuri, sizeof koira, 2, osoitin, vastaa on 1, että tarkoittaa sitä, että haluaisin lukea 2 koiraa tuolloin. Mutta jos fread palauttaa 1 eikä 2 kuten odotettavissa, se tarkoittaa, että on olemassa 2 koirat jäljellä tiedostoni, vaan 1. Mutta jos se palaa 2, niin minulla on vielä nämä 2 koiraa sisällä minun puskuria. Joten nyt joka antaa sinulle tunteen, miten Tarkista tiedoston loppuun, mutta mennään läpi nyt logiikkaa. Miten me oikeastaan ​​pala kaikki nämä yhdessä? Kun me iski ensimmäisen JPG, sillä Tiedämme, että JPGs on tallennettu contiguously, me voidaan kirjallisesti ennen pääsemme loppuun kortisto. Mutta emme halua kirjoittaa mitään siihen saakka. Joten sillä on merkitystä, ei vain, että me olemme aloitettiin uusi JPG, mutta onko olemme jo löytäneet JPG vai ei. Jos se on alku uuden JPG käymme haluat sulkea nykyisen JPG-tiedosto, jos meillä on yksi avoin, ja avoin uusi kirjoittaa osaksi. Jos se ei ole aloittaa uuden JPG, vaikka, me jatkamme samaa JPG-tiedosto avata ja kirjoittaa siihen. Me kirjoitamme puskuri kumpi JPG-tiedosto meillä on käytettävissä, edellyttäen että meillä on yksi avoin, tietenkin. Jos emme ole löytäneet meidän ensimmäinen JPG vielä, emme kirjoita mitään. Ja tämä prosessi jatkuu, kunnes päähän kortisto. Ja lopuksi, sinun kannattaa tehdä Varmista, että olet FSulje mitään tiedostot, jotka olet fopened. Kun olet tyytyväinen käsitteitä, katsomaan joitakin pseudokoodina, jonka olen mukana tässä. Ensin kannattaa avata kortisto, ja toista sitten seuraava prosessi kunnes olet saavuttanut kortin päähän. Haluat lukea 512 tavua puskuriin. Käyttämällä että puskuri, sinun kannattaa tarkistaa olitpa alussa uusi JPG vai ei. Ja vastaus tähän kysymykseen vaikuttaa tiedostojen hallinta - mitkä tiedostot avaat, joka niistä suljet. Sitten, oletko jo löytänyt JPG? Miten olet ollut pitää seurata, että? Sitten, riippuen siitä, että sinun on joko kirjoittaa nykyiseen JPG, että olet on avoin tai ei kirjoita sitä ollenkaan, koska et ole löytänyt JPG vielä. Lopuksi, kun olet saavuttanut loppuun tiedoston, sinun kannattaa sulkea Jäljellä tiedostoja, sinulla on auki. Haluamme olla siisti täällä. Ja että, olet toipunut kaikki puuttuvia tiedostoja että muisti kortti, joka on melko uskomatonta feat. Joten taputtaa itseäsi selkään. Mutta, vielä yksi tekijä PSET, joka on kilpailu. Tulet huomaamaan, että kaikki kuvat että olet toipunut todella kuvia CS50: n henkilöstöä. Joten jos olet oppilaitoksen tai jonnekin lähellä, niin voit ottaa kuvia henkilökunta ja osa, joka on useimmat kuvat toimihenkilön niiden Palautetut tiedostot saada mahtava palkinto. Kanssa, että niin olet valmis takaisin PSET. Nimeni on Zamyla, ja tämä on CS50.