[MUSIC SPIEL] ROB BOWDEN: Hallo. Ich bin Rob, und hoffen wir, dass Diese Lösung hilft, setzen Sie auf dem Weg der Besserung. Also lasst uns loslegen. Wir sehen, dass wir sofort nur um sicherzugehen, dass wir Verwendung ordnungsgemäß wiederherstellen. So ist die Nutzung sollte nur etwas sein wie Punktstrich erholen. Jetzt werden wir öffnen die erwartete Karte dot RAW-Datei. Wir sehen hier, dass wir mit Hilfe der konstant Roh Strich Dateiname, die bis hier haben wir Hash definiert als Karte dot roh. OK. Also müssen wir dafür sorgen, dass die erfolgreich geöffnet, denn wenn es nicht, dann sollten wir den Benutzer zu warnen. Aber davon aus, dass es tat, jetzt sind wir gehen, um einen Puffer der Größe JPEG erklären Länge des Dateinamens. Also, das wird der Puffer sein, dass wir werden in sprintf. Also, was ist JPEG-Dateinamenslänge? Hier oben, sehen wir, dass es Hash definiert als acht. Warum also acht? Nun, eine bestimmte Datei benannt werden so etwas wie Null Null Null. JPG und dann müssen wir einen Backslash Null. Also brauchen wir einen Puffer, der kann speichern acht Zeichen. Jetzt werden wir einen Zähler, ist zu haben gehen, um den Überblick über die zu halten Anzahl JPEGs wir gefunden haben. Und schließlich werden wir haben ein JPEG-Datei, die zunächst null ist die gehen, um die aktuell sein Datei öffnen, die wir zu schreiben. Jetzt sind wir zu haben, ein zusätzlicher Puffer. Dies ist nicht der gleiche wie unsere sprintf Puffer, in dem dieser Puffer ist derjenige dass wir in der Daten lesen sind von der Karte dot roh. So wird der Puffer gehen, um sein unsigned chars, die Sie im Grunde nur behandeln uns Bytes, und es ist gehen, um der Größe der Blockgröße sein wo, wie wir sagen Ihnen, Blockgröße ist 512. So JPEGs kann man alles behandeln als Blöcke von 512 Bytes. Jetzt sind wir in einer Schleife gehen über die gesamte Datei. Wir werden in unsere f Puffer gelesen ein einziges Byte Blockgröße Zeiten von die Karte dot RAW-Datei. Nun, was bedeutet f lesen zurückkehren? Sie gibt die Anzahl der Elemente dass es erfolgreich gelesen. Also, wenn es gelungen, 512 Bytes zu lesen, dann wir sehen, ob das eine wollen JPEG oder schreiben Sie es auf eine JPEG-Datei. Und wenn es hat 512 Byte nicht zurück, dann entweder die Datei im zu Ende ist welcher Fall werden wir aus der y brechen Schleife, oder gibt es eine Art von Fehler in diesem Fall werden wir auch durchbrechen die y-Schleife, aber wollen wir zu berichten, dass etwas schief gelaufen ist. OK. Also unter der Annahme, dass wir erfolgreich gelesen in 512 Bytes, wir wollen erste Prüfung zu machen, dass diese Bytes, die wir lesen Sie einfach in eine JPEG beginnen. Also, wenn JPEG-Header ist der Puffer. Nun, was ist JPEG-Header zu tun? Lassen Sie uns. Hier oben, sehen wir, dass diese Funktion Rückkehr einen Stier, Stier, und dass - gut hier, wir überprüfen, ob Header gleich Null ist und diese Konstante Kopf eins gleich diese Konstante und Kopf zwei ist diese Konstante, Kopf drei gleich diese oder diese konstant, wo alle diese Konstanten nur Hash hier definiert und sind genau das, was wir Ihnen in der Spezifikation erzählt dass ein JPEG beginnt mit. Und so wird diese Funktion nur gehen, um return true, wenn dieser Puffer darstellt der Beginn einer neuen JPEG und ansonsten false. OK. Also, wenn dies tut repräsentieren eine neue JPEG, dann wollen wir, um zu prüfen, ob JPEG-Datei ist nicht gleich null, in diesem Fall werden wir schließen. Und warum brauchen wir, um zu überprüfen zu sehen, wenn es nicht null? Nun, die erste, die wir JPEG finden wir nicht bereits eine offene JPEG-Datei. Und so, wenn wir versuchen, das zu schließen, dann wir nicht etwas ganz richtig machen. Aber jede weitere JPEG dass wir öffnen, zu schließen, wollen wir die vorherige Datei. So, jetzt werden wir sprintf wie wir gesagt, wo wir mit dem Puffer JPEG Dateinamen. Und wir werden in JPEG-Datei verwenden nennen Format wie unser Format. Und was ist das? Hier oben, sehen wir, dass es Null Prozent 3D.jpeg, wo die Null nur drei sagt, dass wir drei ganze Zahlen verwenden dafür aufgefüllt mit Nullen. Das ist also, wie wir null null bekommen one.JPEG und Null 10.JPEG und so weiter. Wir werden sprintf. Und die ganze Zahl, die wir Einsetzen in der String taub JPEGs gewonnen, welche ursprünglich Null ist. Also die erste Datei geöffnet wird Null Null Null Punkt JPEG. Und dann sind wir es so das Erhöhen nächste Datei öffnen wir Null Null sein ein Punkt JPEG und wir werden es erhöhen wieder so werden es null null zwei Punkt sein JPEG und so weiter. Gut. So, jetzt das Innere der JPEG-Datei zu nennen, haben wir die Namen der -Datei, die wir wollen. Wir können f öffnen Sie diese Datei zum Schreiben. OK. Und wieder einmal müssen wir überprüfen, um sicher, dass die Datei erfolgreich da geöffnet, wenn es nicht tat, dann es gab einige Fehler. So, jetzt haben wir die Vergangenheit bekommen haben dies ist ein Teil JPEG. Und hier sehen wir, wir gehen auf die JPEG schreiben. Aber wir müssen zuerst dieses Kontroll, die besagt, JPEG-Datei, wenn nicht gleich null. Warum brauchen wir das? Nun JPEG-Datei ist gleich null, wenn wir Aktuell haben eine offene JPEG. Was ist, wenn Karte dot Roh beginnt mit einem Bündel von Bytes, die keine JPEG darstellen? Dann werden wir zu wollen Überspringen dieser Bytes. Wenn wir nicht dieses Kontroll, dann sind wir gehen, um zu einer ungeöffneten schreiben Datei die ersten 512 Bytes der die Karte, die nicht gut ist. OK. Also vorausgesetzt wir eine offene Datei haben, dann wir werden in diese Datei schreiben die 512 Bytes, die in unserem Puffer zu haben. Und wir sind noch einmal überprüfen, um sicher, dass die 512 Bytes erfolgreich geschrieben wurden, weil, wenn sie es nicht waren erfolgreich geschrieben, dann ist etwas ging schief. Wir werden unsere Dateien zu schließen, drucken, dass etwas schief gelaufen, und zurück. Unter der Annahme, alles richtig geht, dann wir halten Looping Schließen der alte Datei, Öffnen Sie die neue Datei, Schreiben Daten in die neue Datei usw. auf, bis schließlich diese f lesen Null zurück, was bedeutet, dass die Datei erfolgt. So, jetzt, dass das Kartenlese ist vorbei, wir sehen, dass wir gehen, um f schließen letzte Datei, die wir hatten offen, aber wir überprüfen, ob JPEG-Datei nicht gleich null. Nun, die f in der Nähe macht Sinn, weil, wie wir sind das Öffnen von Dateien, die wir schließen die vorherige Datei, aber die letzten Datei, die wir geöffnet wird nie geschlossen. Also das ist, was dieser tut. Aber warum müssen wir für null überprüfen? Nun, was ist, wenn Karte dot roh nicht eine einzelne JPEG innerhalb der IT? In diesem Fall hätten wir noch nie eine Datei. Und wenn wir eine Datei öffnen nie, wir sollten nicht versuchen, diese Datei zu schließen. Also das ist, was dieses Kontroll tut. Jetzt ist hier, wie ich schon sagte, wir konnten haben, dass y-Schleife, wenn entweder gebrochen die Karte beendet ist, oder wenn es einige Fehler beim Lesen von der Karte. Das ist also zu überprüfen, ob es Fehler beim Lesen von der Karte, in wobei in diesem Fall, werden wir es sagen war ein Fehler beim Lesen. Wir wollen nicht, dass der Benutzer zu denken, alles verlief erfolgreich. Und wir werden eine für Fehler zurück. Schließlich werden wir schließen unsere f RAW-Datei, unsere Karte dot roh, zu zeigen, dass alles ging gut und Rückkehr Null und das ist es. Mein Name ist Rob und das war Wiederherstellen. [MUSIC SPIEL]