[GIOCO MUSICA] ROB BOWDEN: Ciao. Sono Rob e speriamo che questa soluzione consente di mettere sulla strada della ripresa. Quindi cerchiamo di iniziare. Vediamo che subito siamo solo per assicurarsi che siamo Uso di Ripristino correttamente. Quindi, l'utilizzo dovrebbe essere solo qualcosa come barra dot recuperare. Ora stiamo andando ad aprire l'atteso Scheda dot file raw. Vediamo qui che stiamo usando la costante il nome del file di sottolineatura raw, che qui abbiamo hash definita come carta dot crudo. OK. Quindi dobbiamo fare in modo che tale aperto con successo perché se non ha, allora dovremmo avvertire l'utente. Ma supponendo che lo ha fatto, ora siamo andando a dichiarare un buffer di dimensioni JPEG file di lunghezza del nome. Quindi questo sarà il buffer che stiamo andando a sprintf in. Così che cosa è un file JPEG lunghezza del nome? Quassù, vediamo che si tratta di hash definito come otto. Allora perché otto? Beh un dato file verrà denominato qualcosa come zero zero zero. JPG e quindi abbiamo bisogno di un backslash zero. Quindi abbiamo bisogno di un buffer che può memorizzare otto caratteri. Ora stiamo andando ad avere un contatore che è andando a tenere traccia della numero JPEG abbiamo trovato. E, infine, stiamo andando ad avere un File JPEG che inizialmente è nullo che sta per essere attualmente aprire il file che stiamo scrivendo a. Ora stiamo andando ad avere un buffer aggiuntivo. Questo non è la stessa della nostra sprintf buffer in cui la memoria è quello che stiamo leggendo nei dati dalla scheda dot crudo. Così il buffer sarà di caratteri senza segno, che è possibile fondamentalmente solo noi trattare byte, ed è andando ad essere di dimensioni dimensione del blocco dove, come vi diciamo, dimensione del blocco è di 512. Quindi JPEG si può trattare tutto come blocchi di 512 byte. Ora stiamo andando a ciclo per tutto il file. Stiamo andando a f di leggere nella nostra tampone un singolo volte byte di dimensione del blocco da la scheda dot file raw. Ora, che cosa fa f legge di ritorno? Restituisce il numero di elementi che si leggeva correttamente. Quindi, se è riuscito a leggere 512 byte, quindi vogliamo vedere se questo è stato un JPEG o scrivere in un file JPEG. E se non ha restituito 512 byte, allora o il file è finito in qual caso faremo uscire dalla y loop, o ci sono alcuni tipo di errore nel qual caso ci sarà anche rompere su il ciclo y, ma ci vorrà riferire che qualcosa è andato storto. OK. Quindi, supponendo che siamo riusciti a leggere in 512 byte, vogliamo primo controllo per fare che questi byte che basta leggere in iniziare un JPEG. Quindi, se è JPEG intestazione della nostra buffer. Ora che cosa sta facendo JPEG intestazione? Diamo un'occhiata. Quassù, vediamo che questa funzione è restituzione di un toro, e che toro - bene qui, stiamo verificando se intestazione uguale a zero questa costante e intestazione uno uguale a questa costante e intestazione due è uguale a questa costante, intestazione tre è uguale questo o questo costante dove tutte queste costanti sono proprio hash definito qui e sono esattamente quello che vi abbiamo detto nelle specifiche che un JPEG inizia con. E quindi questa funzione è solo andare a return true se questo buffer rappresenta l'inizio di un nuovo JPEG e false altrimenti. OK. Quindi, se questo non rappresenta un nuovo JPEG, allora per prima cosa vogliamo verificare se File JPEG non è uguale a null, nel qual caso noi chiudiamo. E allora perché abbiamo bisogno di verificare per vedere se non è nullo? Beh, la prima JPEG che trovare non avremo già un file JPEG aperto. E così, se cerchiamo di chiudere quella, poi non stiamo facendo qualcosa di giusto. Ma ogni successivo JPEG apriamo, vogliamo chiudere il file precedente. Così ora stiamo andando a utilizzare sprintf come noi detto prima dove stiamo usando l' nome file del buffer JPEG. E abbiamo intenzione di utilizzare il file JPEG nome di formato come il nostro format. E che cos'è? Quassù, vediamo che è pari a zero per cento 3D.JPEG dove lo zero tre soli dice che useremo tre numeri interi per questo riempito con zeri. Quindi questo è come ci arriveremo zero zero one.JPEG e lo zero 10.JPEG e così via. Stiamo per usare sprintf. E il numero intero che stiamo inserendo nella stringa è JPEG intorpidite recuperato, che è inizialmente zero. Così il primo file aperto che sta succedendo essere zero zero zero virgola JPEG. E poi stiamo incrementando così la file successivo apriamo sarà zero zero un punto JPEG e faremo incrementiamo che di nuovo così sarà zero zero due punti JPEG e così via. Bene. Così ora all'interno del file JPEG nome, abbiamo il nome del file che vogliamo. Possiamo f aprire il file per la scrittura. OK. E ancora una volta, dobbiamo controllare per Assicurarsi che il file correttamente aperto dal se non ha, quindi c'era qualche errore. Così ora abbiamo ottenuto oltre il questa è una parte JPEG. E qui, si vede che stiamo andando di scrivere al JPEG. Ma dobbiamo prima questo controllo che dice se il file JPEG non è uguale null. Perché abbiamo bisogno di questo? Beh file JPEG uguale nullo quando attualmente hanno un JPEG aperto. Che se la scheda dot inizia prime con un mazzo di byte che non rappresentano un JPEG? Poi andremo a voler saltare quei byte. Se non abbiamo questo controllo, allora siamo andando a scrivere in un aperto presentare i primi 512 byte di la carta che non è buono. OK. Quindi, supponendo che abbiamo un file aperto, quindi andremo a scrivere quel file l' 512 byte che abbiamo nel nostro buffer. E stiamo ancora una volta il controllo per assicurarsi Assicurarsi che i 512 byte successo sono stati scritti perché se non fossero scritto con successo, allora qualcosa è andato storto. Ci chiudiamo i nostri file, la stampa che qualcosa è andato storto, e ritorno. Supponendo che tutto va bene, poi terremo loop chiusura del vecchio file, l'apertura del nuovo file, la scrittura dati al nuovo file, e così fino alla fine, questo f leggi restituisce zero, che significa che il file è fatto. Quindi, ora che la lettura della carta è finita, vediamo che stiamo andando a chiudere la f ultimo file che avevamo aperto, ma stiamo controllando se il file JPEG non è uguale a null. Beh, la f vicino ha un senso, perché come stiamo aprendo i file, stiamo chiudendo il file precedente, ma l'ultimo il file che abbiamo aperto non viene mai chiusa. Ecco, questo è ciò che questo sta facendo. Ma perché abbiamo bisogno di controllare per nulla? Beh, cosa se la scheda dot prime non ha avere un unico JPEG all'interno di esso? In quel caso, avremmo mai aperto un file. E se non abbiamo mai aprire un file, dovremmo Non tentare di chiudere quel file. Ecco, questo è ciò che questo controllo sta facendo. Ora qui, come ho detto prima, abbiamo potuto hanno rotto che y ciclo o se la scheda è terminato o se vi sono qualche errore di lettura dalla scheda. Quindi questo è il controllo per vedere se c'era un errore di lettura dalla scheda, in qual caso, diremo lì è stato un errore di lettura. Non vogliamo l'utente a pensare tutto è andato con successo. E torneremo uno per errore. Infine, faremo f chiudiamo il nostro file raw, la nostra carta dot crudo, per indicare che tutto è andato bene e ritorno zero e il gioco è fatto. Il mio nome è Rob e questo era Recover. [GIOCO MUSICA]