[Muziek] ROB BOWDEN: Hi. Ik ben Rob, en laten we hopen dat Deze oplossing helpt zet je op de weg naar herstel. Dus laten we beginnen. We zien dat we meteen zijn gewoon om ervoor te zorgen dat we met behulp van de juiste herstellen. Dus het gebruik moet gewoon iets zijn zoals dot slash herstellen. Nu gaan we openen de verwachte kaart dot RAW bestand. We zien hier dat we met behulp van de constante ruwe underscore bestandsnaam, die tot hier hebben we hash gedefinieerd als kaart dot rauw. OK. Dus moeten we ervoor zorgen dat die succesvol geopend want als het niet, dan moeten we de gebruiker te waarschuwen. Maar de veronderstelling dat het deed, zijn we nu gaat om een ​​buffer van omvang JPEG verklaren lengte van de bestandsnaam. Dus dit gaat om de buffer te zijn dat we gaan sprintf in. Dus wat is JPEG lengte van de bestandsnaam? Hier zien we dat het hash gedefinieerd als acht. Dus waarom acht? Nou een bepaald bestand wordt benoemd iets als nul nul nul. JPG en dan moeten we een backslash nul. Dus hebben we een buffer die kan nodig slaan acht tekens. Nu gaan we een teller die hebben gaan voor het bijhouden van de te houden aantal JPEG's vonden we. En tot slot, we gaan een JPEG-bestand dat is in eerste instantie null die gaat het op dit moment zijn geopend bestand dat we schriftelijk aan. Nu gaan we hebben een extra buffer. Dit is niet hetzelfde als onze sprintf buffer waar buffer degene dat we lezen in de data van de kaart dot rauw. Dus de buffer gaat te zijn unsigned chars, die u kunt eigenlijk gewoon behandelen ons bytes, en het is gaan van grootte blokgrootte te zijn waar, zoals we u vertellen, blokgrootte 512. Dus JPEG's kunt u alles te behandelen als blokken van 512 bytes. Nu gaan we een lus over het gehele bestand. We gaan f lezen in onze buffer een enkele keer byte blok grootte van de kaart dot RAW bestand. Nu wat doet f leest terug? Het geeft het aantal items dat het met succes lezen. Dus als het erin geslaagd om 512 bytes lezen, dan we willen zien of dit een JPEG of schrijf het op een JPEG-bestand. En als het niet 512 bytes terug, vervolgens het bestand is geëindigd in welk geval we uit de y breek lus, of er een soort van fout In dat geval zullen we ook doorbreken de y-lus, maar we willen rapporteren dat er iets mis ging. OK. Dus de veronderstelling dat we met succes lezen in 512 bytes, willen we eerst controleren ervoor dat deze bytes dat we lees net in beginnen aan een JPEG. Dus als is JPEG header van onze buffer. Nu wat het JPEG header aan het doen? Laten we eens kijken. Hier zien we dat deze functie terugsturen van een stier, en die stier - goed hier, we controleren om te zien of header nul is gelijk aan deze constante en header een is deze constante en header twee is deze constante, header drie is deze of deze constant waar al deze constanten zijn gewoon hash hier gedefinieerd en zijn precies wat we u verteld in de spec dat een JPEG begint met. En dus deze functie is slechts gaat return true als deze buffer vertegenwoordigt de start van een nieuwe JPEG en anders false. OK. Dus als dit doet vertegenwoordigen een nieuwe JPEG, dan we willen eerst controleren of JPEG-bestand is niet gelijk aan nul, in welk geval we sluiten. En waarom hebben we nodig om te controleren om te zien of het is niet nul? Nou, de eerste JPEG dat we vinden we niet al een open JPEG-bestand. En dus, als we proberen te sluiten dat, dan we zijn niet iets heel goed doen. Maar elke volgende JPEG dat we openen, willen we sluiten het vorige bestand. Dus nu gaan we sprintf gebruiken als we gezegd waar we met behulp van de buffer JPEG bestandsnaam. En we gaan JPEG-bestand gebruiken noemen formaat als onze formaat. En wat is dat? Hier zien we dat het percentage nul 3D.JPEG waar de nul drie net zegt dat we drie getallen zullen gebruiken voor deze opgevuld met nullen. Dus dit is hoe we nul nul krijgt one.JPEG en nul 10.JPEG enzovoort. We gaan sprintf gebruiken. En het getal dat we het invoegen in de string is gevoelloos JPEG's teruggewonnen, wat van oorsprong nul. Dus het eerste bestand geopend gaat te zijn nul nul nul dot JPEG. En dan zijn we het verhogen van het zo de volgend bestand openen we zullen nul nul een punt JPEG en we zullen het verhogen weer dus het zal nul nul twee dot be JPEG enzovoort. Oke. Dus nu de binnenkant van JPEG-bestand te noemen, hebben we de naam van de bestand dat we willen. We kunnen f openen dat bestand voor schrijven. OK. En nogmaals, we moeten controleren om ervoor te ervoor dat het bestand met succes aangezien geopend als het niet, dan er was een fout. Dus nu hebben we langs de gekregen is dit een JPEG deel. En hier zien we we gaan te schrijven aan de JPEG. Maar we moeten eerst deze controle die zegt als JPEG-bestand is niet gelijk aan nul. Waarom hebben we dat nodig? Nou JPEG-bestand is gelijk aan nul als we momenteel hebben een open JPEG. Wat als kaart dot ruwe start met een bos van bytes die niet die van een JPEG? Dan gaan we willen overslaan die bytes. Als we niet over deze controle, dan zijn we gaat schrijven aan een ongeopende het dossier van de eerste 512 bytes van de kaart die is niet goed. OK. Dus de veronderstelling dat we er een open bestand, dan we gaan schrijven dat het dossier van de 512 bytes die we hebben in onze buffer. En we opnieuw controleren om ervoor te ervoor dat de 512 bytes succes werden geschreven omdat als ze niet waren succes geschreven, dan is er iets ging het mis. We zullen onze bestanden te sluiten, af te drukken dat ging er iets mis, en terugkeer. Ervan uitgaande dat alles goed gaat correct, maar dan we houden looping het sluiten van de oude bestand, het openen van het nieuwe bestand, schrijven gegevens naar het nieuwe bestand, en dus op totdat uiteindelijk, deze f lezen nul terug die middelen dat het bestand wordt uitgevoerd. Dus nu dat de kaart lezen is voorbij, we zien dat we gaan f sluiten laatste bestand dat we open, maar we controleren of JPEG-bestand is niet gelijk aan nul. Nou, de f dicht is logisch, want als we openen van bestanden, we gaan sluiten het vorige bestand, maar de allerlaatste bestand dat we geopend wordt nooit gesloten. Dus dat is wat dit doet. Maar waarom moeten wij om te controleren op nul? Tja, wat indien kaart dot ruwe niet hebben een enkele JPEG binnenkant van het? In dat geval zouden we nooit een bestand geopend. En als we nooit een bestand te openen, moeten we niet proberen om dat bestand te sluiten. Dus dat is wat deze controle doet. Nu hier, zoals ik al zei, konden we dat y lus ofwel als zijn uitgebroken de kaart is beëindigd of wanneer er enkele fout bij het lezen van de kaart. Dus dit is het controleren om te zien of er een fout bij het lezen van de kaart, in dat geval, zullen we daar zeggen was een fout bij het lezen. We willen niet dat de gebruiker om na te denken alles verliep succesvol. En we zullen een voor fout geretourneerd. Tot slot zullen we f onze ruwe bestand te sluiten, onze kaart dot rauw, om aan te geven dat alles ging goed en de terugkeer nul en dat is het. Mijn naam is Rob en dit was Recover. [Muziek]