[MUSIK SPELA] ROB BOWDEN: Hej. Jag är Rob, och låt oss hoppas att denna lösning hjälper sätta dig på vägen till återhämtning. Så låt oss komma igång. Vi ser att vi omedelbart är bara att se till att vi är med hjälp Recover korrekt. Så användningen ska bara vara något som punkt snedstreck återhämta sig. Nu ska vi öppna den förväntade kort dot raw-filen. Vi ser här att vi använder konstant filnamn rå streck, som här uppe har vi hash definierad som kort dot rå. OK. Så vi måste se till att det öppnat för om det inte, bör vi varna användaren. Men om man antar att den gjorde det, är vi nu kommer att förklara en buffert av storlek JPEG filnamnslängd. Så det här kommer att bli den buffert som vi ska sprintf in. Så vad är JPEG filnamnslängd? Här uppe, ser vi att det är hash definieras som åtta. Så varför åtta? Jo en viss fil får namnet något som noll noll noll. JPG och då behöver vi ett omvänt snedstreck noll. Så vi behöver en buffert som kan lagra åtta tecken. Nu ska vi ha en räknare som är kommer att hålla reda på antal JPEG vi hittade. Och slutligen kommer vi att ha en JPEG-fil som är initialt noll som kommer att vara den för tillfället öppna filen som vi skriver på. Nu ska vi ha en ytterligare buffert. Detta är inte samma sak som vår sprintf buffert där denna buffert är en att vi läser i data från kortet dot rå. Så bufferten kommer att vara av osignerade tecken, som du kan princip bara behandla oss byte, och det är kommer att vara av storleksblockstorlek där, eftersom vi berätta, blockstorlek är 512. Så JPEG-bilder som du kan behandla allt som block av 512 bitgrupper. Nu ska vi slinga över hela filen. Vi kommer att f läsa in vår buffert en enda byte blocket storlek tider från kortet dot raw-filen. Nu vad f läser tillbaka? Den returnerar antalet objekt att det framgångsrikt läsa. Så om det lyckats läsa 512 byte, då vi önskar att se om detta var ett JPEG eller skriva den till en JPEG-fil. Och om det inte kom tillbaka 512 byte, sedan antingen filen har slutat i då vi ska bryta ut y slinga, eller om det finns någon form av fel i vilket fall kommer vi också bryta sig ur y slingan, men vi vill rapportera att något gick fel. OK. Så antar att vi lyckas läsa på 512 byte, vi vill först kontrollera att göra att dessa byte som vi bara läsa in påbörja en JPEG. Så om är JPEG rubriken på vår buffert. Nu vad det JPEG header gör? Låt oss titta. Här uppe, ser vi att denna funktion är returnera en tjur, och att tjuren - bra här, vi kontrollera om header noll är lika med detta konstant och header ett är lika med detta konstant och header två är lika med denna konstant, header tre är lika med detta eller detta konstant där alla dessa konstanter är precis hash definieras här och är exakt vad vi sagt i spec att en JPEG börjar med. Och så den här funktionen är bara att return true om denna buffert representerar början på en ny JPEG och i annat fall false. OK. Så om detta inte utgör en ny JPEG, då vi först vill kontrollera om JPEG-fil är inte lika med noll, i vilket fall vi stänga den. Och så varför behöver vi för att kontrollera för att se om det inte är noll? Jo det första JPEG som vi finner vi inte redan har en öppen JPEG-fil. Och så, om vi försöker stänga det, då att vi inte gör något helt rätt. Men varje efterföljande JPEG som vi öppnar, vi vill stänga föregående fil. Så nu ska vi använda sprintf som vi sa innan där vi använder buffert JPEG filnamn. Och vi kommer att använda JPEG-fil name format som vårt format. Och vad är det? Här uppe, ser vi att det är procent noll 3D.JPEG där noll tre bara säger att vi kommer att använda tre heltal för detta utfylls med nollor. Så det här är hur vi ska få noll noll one.JPEG och noll 10.JPEG och så vidare. Vi kommer att använda sprintf. Och det heltal som vi sätter i i strängen är numb JPEG återvinnas, vilket är ursprungligen noll. Så den första filen öppnas går vara noll noll noll dot JPEG. Och sedan vi uppräkning det så nästa fil öppnar vi kommer att vara noll noll en prick JPEG och vi kommer att öka det igen så det ska bli noll noll två dot JPEG och så vidare. Okej. Så nu insidan av JPEG-fil namn, har vi namnet på den fil som vi vill ha. Vi kan f öppna filen för skrivning. OK. Och än en gång, måste vi kontrollera att Se till att filen framgångsrikt öppnats sedan om det inte gjorde det, då det fanns vissa fel. Så nu har vi kommit förbi detta är en JPEG-delen. Och här ser vi att vi ska att skriva till JPEG. Men vi först har denna kontroll, som säger Om JPEG-filen inte är lika med noll. Varför behöver vi det? Tja JPEG-fil är lika med noll när vi för närvarande har en öppen JPEG. Tänk om kort dot rå starter med en massa byte som representerar inte en JPEG? Sen ska vi vilja hoppa över dessa bytes. Om vi ​​inte har denna kontroll, då är vi ska skriva till en oöppnad lämna de första 512 byte av kortet, som inte är bra. OK. Så antar att vi har en öppen fil, sedan vi kommer att skriva till den filen på 512 byte som vi har i vår buffert. Och vi återigen kontrollera för att Se till att de 512 byte framgångsrikt skrevs för om de inte var framgångsrikt skriven, då något gick fel. Vi stänger våra filer, skriva ut den något gick fel, och retur. Förutsatt att allt går rätt, då Vi ska hålla looping stänga gamla filen, öppna den nya filen, skrift data till den nya filen, och så på tills slutligen, detta f läsa returnerar noll som medel att filen är gjort. Så nu att kort behandlingen är över, vi ser att vi kommer att f stänga sista filen som vi hade öppet, men Vi kollar om JPEG-fil inte lika med noll. Tja f nära vettigt eftersom som vi öppnar filer, vi stänger den tidigare filen, men den allra sista fil som vi öppnade aldrig blir stängd. Så det är vad det gör. Men varför måste vi kontrollera null? Tja vad händer om kort prick rå inte har en enda JPEG insidan av det? I så fall skulle vi ha aldrig öppnat en fil. Och om vi öppnar aldrig en fil, bör vi inte försöker stänga den filen. Så det är vad denna kontroll gör. Nu här, som jag sa tidigare, vi kunde har brutit ut att y slinga antingen om kortet är avslutad eller om det finns några fel vid läsning från kortet. Så detta är kontroll för att se om det fanns ett fel vid läsning från kortet, i vilket fall, vi säger att det Ett fel läsning. Vi vill inte att användaren att tänka allt gick utan problem. Och vi kommer att återvända en för fel. Slutligen ska vi f stänga vår raw-filen, våra kort dot rå, för att indikera att allt gick bra och retur noll och det är det. Mitt namn är Rob och detta var Recover. [MUSIK SPELA]