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