[Speel van musiek] ROB BOWDEN: Hi. Ek is Rob, en laat ons hoop dat help hierdie oplossing het jy op die pad na herstel. So laat ons begin. Ons sien dat ons dadelik is net om seker te maak dat ons maak gebruik te maak van herstel korrek. So het die gebruik moet net iets wees soos dot streep herstel. Nou gaan ons oop te maak die verwagte kaart dot rou lêer. Ons sien hier dat ons met behulp van die konstante rou underscore lêer naam, wat tot hier het ons hash gedefinieer as kaart dot rou. OK. So ons moet seker maak dat suksesvol oopgemaak, want as dit het nie, dan moet ons die gebruiker waarsku. Maar die veronderstelling dat dit gedoen het, het ons nou is gaan 'n buffer grootte JPEG te verklaar lêernaam lengte. So dit gaan die buffer te wees dat ons gaan sprintf in. So, wat is JPEG lêer naam lengte? Hier, sien ons dat dit hash gedefinieer as agt. So hoekom agt? Wel 'n gegewe lêer sal genoem word iets soos nul nul nul. JPG en dan moet ons 'n backslash nul. So het ons 'n buffer wat kan stoor agt karakters. Nou gaan ons 'n toonbank wat te hê gaan die spoor van die te hou aantal JPEG ons gevind. En ten slotte, gaan ons 'n JPEG lêer wat aanvanklik null wat gaan die oomblik wees open lêer wat ons skryf te. Nou gaan ons te hê 'n bykomende buffer. Dit is nie dieselfde as ons sprintf buffer waar hierdie buffer is die een dat ons lees in die data van die kaart dot rou. So het die buffer gaan wees van unsigned karakters, wat jy kan basies net ons behandel grepe, en dit is gaan wees van die grootte blok grootte waar, soos ons vertel nie, blok grootte is 512. So JPEG jy alles kan hanteer as blokke van 512 grepe. Nou gaan ons lus oor die hele lêer. Ons gaan om te f lees in ons buffer 'n enkele byte blok grootte tye van die kaart dot rou lêer. Nou wat beteken f lees terugkeer? Dit gee die aantal items dat dit suksesvol te lees. So as dit reggekry 512 grepe om te lees, dan ons wil om te sien of dit 'n JPEG of skryf dit op 'n JPEG lêer. En as dit nie terugkeer 512 grepe, dan óf die lêer in geëindig welke geval ons sal weg te breek van die y lus, of daar is 'n soort van fout in welke geval ons sal ook breek uit die y lus, maar ons sal wil hê om te rapporteer dat iets verkeerd geloop het. OK. So die veronderstelling dat ons suksesvol gelees in 512 grepe, ons wil die eerste tjek te maak dat hierdie grepe dat ons lees net in begin met 'n JPEG. So as is JPEG kop van ons buffer. Nou wat dit is JPEG kop doen? Kom ons kyk. Hier sien ons dat hierdie funksie is terugkeer 'n bul, en dat die bul - Wel, hier, ons nagaan om te sien of kop nul is gelyk aan die konstante en kop een is hierdie konstante en kop twee is gelyk aan die konstante, kop drie is gelyk aan hierdie of hierdie konstante waar al hierdie konstantes is net hash gedefinieer reg hier en is presies wat ons vertel het in die spec dat 'n JPEG begin met. En so word die funksie net gaan terugkeer waar as hierdie buffer verteenwoordig die begin van 'n nuwe JPEG en valse anders. OK. So as dit nie stel 'n nuwe JPEG, dan wil ons eers na te gaan om te sien of JPEG lêer is nie gelyk aan nul, in welke geval ons sluit dit. En so hoekom moet ons kyk om te sien of dit is nie nul? Wel, die eerste JPEG dat ons vind ons sal nie reeds 'n oop JPEG lêer. En so, as ons probeer om dit te maak, dan ons is nie iets heeltemal reg nie. Maar elke daaropvolgende JPEG wat ons oopmaak, wil ons te sluit die vorige lêer. So nou gaan ons sprintf te gebruik soos ons gesê voordat waar ons met behulp van die buffer JPEG lêer naam. En ons gaan JPEG lêer te gebruik noem formaat as ons formaat. En wat is dit? Hier, sien ons dat dit persent nul 3D.JPEG waar die nul drie net sê dat ons drie heelgetalle sal gebruik vir hierdie opgestop met nulle. So dit is hoe ons sal nul nul kry one.JPEG en nul 10.JPEG en so aan. Ons gaan sprintf te gebruik. En die heelgetal wat ons inbring in die string is afgestomp JPEG verhaal, wat oorspronklik nul. Dus is die eerste lêer oopgemaak gaan nul nul nul dot JPEG. En dan is ons die verhoog dit so die volgende lêer maak ons ​​sal nul nul wees een dot JPEG en ons sal dit inkrementeer weer so sal dit nul nul twee dot wees JPEG en so aan. Alle regte. So nou die binnekant van JPEG-lêer noem, ons het die naam van die lêer wat ons wil hê. Ons kan f die lêer oopmaak vir skryf nie. OK. En weer, moet ons seker maak seker dat die lêer suksesvol geopen is sedert as dit gedoen het nie, dan daar was 'n fout. So nou het ons verby die gekry het is dit 'n JPEG deel. En hier sien ons wat ons gaan na die JPEG te skryf. Maar ons moet eers die tjek wat sê As JPEG lêer is nie gelyk aan nul. Hoekom moet ons dit? Wel JPEG lêer is gelyk aan nul wanneer ons tans 'n oop JPEG. Wat as kaart dot rou begin met 'n klomp van die grepe wat nie 'n JPEG verteenwoordig? Dan gaan ons wil spring oor die grepe. As ons nie hierdie tjek, dan is ons gaan 'n onoopgemaakte te skryf dien die eerste 512 grepe van die kaart wat is nie goed nie. OK. So die veronderstelling ons het 'n oop-lêer, dan ons gaan om die lêer te skryf die 512 grepe wat ons in ons buffer. En ons is weer nagaan om te maak seker te maak dat die 512 grepe suksesvol is omdat geskryf as hulle nie suksesvol geskryf is, dan is daar iets verkeerd geloop het. Ons sal ons lêers sluit, druk wat iets verkeerd geloop het, en terugkeer. Veronderstelling alles reg gaan, dan ons sal aanhou herhaling die sluiting van die ou lêer, die opening van die nuwe lêer, skriftelik data na die nuwe lêer, en so totdat uiteindelik, hierdie f gelees terugkeer nul, wat beteken dat die lêer gedoen. So nou dat die kaart lees is verby, ons sien dat ons gaan f sluit die laaste lêer wat ons gehad het oop, maar Ons monitor of JPEG-lêer nie gelyk null. Wel, die f naby sin maak, want as ons die opening van lêers, ons is die sluiting die vorige lêer, maar op die laaste lêer wat ons oopgemaak word nooit gesluit. So dit is wat dit is om te doen. Maar hoekom ons nodig het om te kyk vir null? Wel, wat as kaart dot rou het nie 'n enkele JPEG binnekant van dit? In daardie geval, sou ons nooit 'n lêer geopen. En as ons nooit 'n lêer oop te maak, moet ons nie probeer om die lêer te sluit. So dit is wat die tjek doen. Nou hier, soos ek gesê het, kon ons gebreek het dat y lus óf as die kaart eindig of indien daar sommige fout met lees van die kaart. So dit is om te kyk of daar 'n fout met die lees van die kaart, in welke geval, sal ons daar sê was 'n fout te lees nie. Ons wil nie die gebruiker om te dink alles suksesvol het. En ons sal een keer vir foute. Ten slotte, sal ons f sluit ons rou lêer, Ons kaart dot rou, wat aan te dui alles goed en terugkeer het nul en dit is dit. My naam is Rob en dit was herstel. [Speel van musiek]