[Muusika mängib] ZAMYLA Chan: Räägime taastuda. Taasta on ilmselt minu lemmik Erksa, ning peamiselt seetõttu, et ma arvan, et see on tõesti, tõesti lahe. Põhimõtteliselt sa antud mälu kartoteeki, kus pildid on kustutatud. Aga mida sa lähed vaja on taastada neid kõiki. OK. Nii et see on tõesti põnev, kuid võib-olla natuke hirmutav, sest sa oled ühe tühja C fail ja sa pead täitma selle sisse OK, nii et olgem murda juhitavaks osad. Sa tahad, et avada mälukaart fail. See tundub lihtne. Siis leiavad alguses on JPG pilt. Kõik failid selles mälu kaardi saab olema JPGs. Siis, kui sa leiad Alguses sa lähed, et avada uus JPG, et on, nagu loo JPG, ja kirjutada 512 bait korraga kuni uue JPG on leitud ja programmi lõpetamisel tuleb ette, kui teil avastada faili lõppu. Nii esimesed sammud esimene on avada mälukaart fail. Aga sa tead seda juba, ja seal on Faili I / O funktsioon, mis läheb osutuda väga kasulikuks. OK. Millised on JPGs? Sest meil on vaja alguses seda. Noh, JPGs, just nagu natuke kaarte on vaid järjestusi baiti. Õnneks iga JPG algab kas 0xFF, 0xd8, 0xFF, 0xe0 üks jada baite või teise jada bytes. Nii et need neli baiti näitavad algust JPG. Ei keegi muu kui nende kahe kombinatsioonid neli baiti. Ja õnneks meile veel, et me saab ära kasutada on, et iga JPG salvestatakse side-by-side mälukaardile. Olen esindatud struktuuri mälukaardi skemaatiliselt selle lükake siin. Siin on iga ruudu iga ristkülik, esindab 512 baiti, ja ta hakkab halli on, et me ei tegelikult on JPG. Aga siis me lõpuks lüüa plokk star. See tähendab, et esimese nelja baiti välja Nende 512 on üks neist kahest alustades järjestused JPG. Ja me läheme sealt ja siis, kui üks JPG lõpeb, järgmine algab. Me ei kunagi enam halli ruumi vahele. Aga kuidas me tegelikult lugeda seda, ja loe 512 baiti, nii et me saame võrreldes esimese koha? Noh, lähme tagasi fread, mis võtab struktuure, mis sisaldavad bytes et sa loed. Nii et sa lähed panna need on - suurus, number ja seejärel inpointer et sa loed alates. Nüüd tahan lugeda 512 korraga, ja tahame säilitada seda puhvris Ma kutsun seda. Põhimõtteliselt me ​​hoida peale nende 512 baiti ja teha asju teha, eks? Me kas läheb võrrelda esimese neli baiti, või me läheme lugeda seda, eks? Nii siis andmed kursor siis olla oma puhvris ja inpointer hästi, et lihtsalt läheb olla oma mälukaart. Tagasi meie mälukaart skemaatiline. Me lugeda 512 baiti korraga ladustamiseks iga 512-byte ploki puhver, kellel peale nende puhver, need 512 baiti, kuni me teame täpselt, mida teha nendega. Seega alguses ei ole midagi, et me loeme puhver, võrrelda ja meil ei ole vaja midagi teha. Ja siis, et me lõpuks lüüa star blokeerida, mis tähendab, et me oleme leidsin meie esimese JPG. Nii puhver nüüd hoidke baitide et JPG. Järgmine kord, 512 bytes, sest nad on ei staar block, on ka osa sellest JPG. Ja JPGs on pidev sealt sisse, kuni me tabas järgmise JPG. Ja siis puhver siis omab 512 baiti et JPG, ja nii edasi, ja nii edasi. OK. Nii et kui sa vajutad esimest tärniga blokaad, esimese JPG, kuidas te tegelikult, noh, seda avada? Teeme uue JPG. Failinimesid JPG lähed olema vormis, number, number, number.jpg, et nad nimetatud järjekorras, milles nad asuvad, alates 0. Nii et esimene JPG, et sa leida tuleb 000.jpg. Niisiis, ilmselt hea mõte jälgida kui palju JPGs olete leidnud siiani. Nii et faili nimi. Aga kuidas sa tegelikult teha seda? Noh, me ei kavatse kasutada funktsiooni nimetatakse sprintf. Natuke sarnane printf, kus saate kohatäiteks stringid, välja arvatud sel juhul, sprintf prinditakse file viidud praegune kataloog, mitte terminali. OK. Nii et siin me näeme, et meil on pealkiri, char massiiv, mis salvestab Saadud string, ja võtame sisse pealkiri tegeliku stringi kohatäide, nii nagu me oleme õppinud pistmist printf. Aga see kood mis mul siin annab 2.jpg mitte 002.jpg. Nii et ma jätan teile, et teada saada, kuidas muuta kohatäide teha õige nimi. OK. Nii et kui olete sprintf'd siis saate seda faili avada, sest see on olemas oma kataloog, fopen, kasutades pealkiri ja siis ükskõik millist sa tahad avada see fail sisse Nüüd, et oleme avanud uue JPG faili Nüüd me saame kirjutada 512 baiti at aega, kuni uus JPG leitakse. Võtame teise ilme süntaksi fwrite. Ma tean, et ma olen näitab see slaid palju, aga ma lihtsalt tahan veenduda, et te ei saa liiga segaduses, sest Ma tean, et see on väga lihtne segatakse esimese ja viimase argument, eriti. Kuid pidage meeles, et sa oled kirjutamise oma puhvri välja fail pildid. Nüüd sa tead, kuidas kirjutada 512 bytes oma JPG faili, et olete loodud, me ei taha enam, et protsessi kui oleme jõudnud Meie kaardi, sest seal ei ole rohkem pilte leida. Lähme tagasi fread veel kord, ma luban. fread tagastab mitu objekti suurusest, suurus, valmisid edukalt. Ideaalis saab olenemata te kaotate jaoks number, eks? Sest sa üritad lugeda number elementide suurus, suurus. Aga kui fread ei saa lugeda, et mitmeid elemente, siis tulen tagasi mis iganes number ta lugeda edukalt. Nüüd üks oluline asi on tähele panna, et kui te kasutate mõnda muud faili I / O funktsioon nagu fgetc, siis see ka tagasi kui palju punkte ta lugeda edukalt. Mis on kasulik selle funktsiooni et kui kasutate funktsiooni sees tingimust, siis hukkab ise samal ajal määratakse kindlaks, et nõue, mis on lihtsalt väga kasulik. Nii et kui teil on selle tingimused, ütleme, kui fread puhver, sizeof koer, 2, pointer, võrdub võrdub 1, et tähendab, et ma tahaks lugeda 2 koertel aega. Aga kui fread tagastab 1 asemel 2 nagu oodatakse, see tähendab, et seal on 2 koerad vasakul minu fail, vaid 1. Aga kui ta tagasi 2, siis mul on veel need 2 koera sees minu puhver. Nüüd, et annab sulle tunde, kuidas kontrollida faili lõppu, kuid Lähme läbi nüüd loogika. Kuidas me tegelikult panema kõik need elemendid koos? Kui me tabanud meie esimene JPG, sest me teame, et JPGs salvestatakse contiguously saadame kirjalikult kuni jõuame lõpuks kartoteeki. Aga me ei taha, et kirjutada midagi seni. Nii et see on tähtis, mitte ainult seda, et me oleme algab uus JPG, kuid kas me oleme juba leidnud JPG või mitte. Kui see on algus uue JPG, me tulen Kas sulgeda meie praegune JPG faili, kui meil on üks avatud ja avatud uus kirjutada arvesse. Kui see ei ole algusest uus JPG, kuigi me hoiame sama JPG fail avada ja kirjutada sinna. Me kirjutame meie puhvri kumb JPG faili oleme avatud, tingimusel et meil on üks avatud, muidugi. Kui me ei ole leidnud meie esimene JPG Aga me ei kirjuta midagi. Ja see protsess jätkub, kuni olete jõuda lõpuks kaardi faili. Ja lõpuks, sa tahad teha veenduge, et te kirjutamisel iga failid, et olete fopened. Kui oled rahul mõisted, kui heita pilk mõned pseudokoodi, mida ma olen siin. Esiteks, mida soovite avada kartoteek, ja siis korda järgmine protsess kuni olete jõudnud lõpuks kaardile. Sa tahad, et lugeda 512 baiti viiakse puhvris. Kasutades et puhver, mida sa tahad, et kontrollida kas sa oled alguses uus JPG või mitte. Ja vastus sellele küsimusele tahe mõjutada teie failihaldus - mis faili avate, mis ones sa sulgeda. Siis oled sa juba leidnud JPG? Kuidas teil on hoida peal on? Siis, sõltuvalt, et sul on kas kirjutage praeguse JPG, et sa on avatud või ei kirjuta üldse, sest sa ei ole leidnud JPG veel. Lõpuks, kui olete jõudnud lõpuks fail, mida sa tahad sulgeda Ülejäänud faile ei avatud. Tahame olla kasitud siin. Ja, et olete taastunud kõik puuduvad failid, et mälu kaart, mis on üsna hämmastav feat. Nii pat ise tagaküljel. Aga seal on veel üks element, Erksa, mis on võistlus. Leiad, et kõik pildid et olete taastunud on tegelikult pilte CS50 töötajad. Nii et kui sa oled ülikooli või kuskil lähedal, siis saate pildistada personal ja osa, mis on enamik pilte töötajad oma taastatud failid tahe saada vinge auhind. Mis, siis olete lõpetanud taastuda Erksa. Minu nimi on Zamyla ja see on CS50.