>> [Música tocando]
>> ROB BOWDEN: Oi
Estou Rob, e imos esperar que esta solución axuda a colocar-lo
no camiño para a recuperación.
Entón, imos comezar.
>> Vemos que estamos inmediatamente só para ter seguro de que estamos
Solicitar utilizando correctamente.
Así, o uso debe ser só algo como barra dot recuperar.
>> Agora imos abrir esperado tarxeta de punto ficheiro raw.
Vemos aquí que estamos usando a constante nome do ficheiro subliñado cru,
que ata aquí temos de hash definido como tarxeta de punto cru.
Aceptar.
>> Por iso, necesitamos ter seguro de que iso aberto correctamente porque se
non, entón temos que avisar o usuario.
Pero supoñendo que fixo, agora estamos vai declarar un buffer de tamaño JPEG
ficheiro longo do nome.
Polo tanto, este será o tapón que imos en sprintf.
>> Entón o que é JPEG arquivo lonxitude do nome?
Ata aquí, vemos que é botar axusta oito.
Entón, por oito anos?
Ben un determinado arquivo será nomeado algo así como cero cero cero.
JPG e entón necesitamos unha barra invertida cero.
Entón necesitamos un buffer que pode almacenar oito caracteres.
Agora imos ter un contador que se vai seguir o
JPEGs número que atopamos.
>> E, finalmente, imos ter un Ficheiro JPEG que é inicialmente nula
cal será o momento ficheiro aberto que estamos escribindo.
Agora imos ter un tapón adicional.
Este non é o mesmo que o noso sprintf buffer onde ese buffer é aquel
que estamos lendo nos datos da tarxeta de punto cru.
>> Así, o tapón será de caracteres non asinados, que pode
basicamente só nos tratan bytes, e é será do tamaño do tamaño do bloque
onde, como lle digo, tamaño do bloque é 512.
Entón JPEGs pode tratar de todo como bloques de 512 bytes.
>> Agora imos facer un loop sobre o arquivo enteiro.
Imos f ler na nosa memoria intermedia un único byte veces tamaño do bloque de
a tarxeta de punto ficheiro raw.
Agora, o que f ler volver?
El retorna o número de elementos que trata con éxito.
Entón, se conseguiu ler 512 bytes, logo queremos ver se este era un
JPEG ou gravalo nun ficheiro JPEG.
E se non volver 512 bytes, a continuación, o ficheiro terminou en
caso en que nós imos saír do y loop, ou se hai algún tipo de erro
caso en que tamén vai saír da o loop y, pero imos querer denunciar
que algo deu errado.
>> Aceptar.
Así, supoñendo que lemos correctamente en 512 bytes, queremos primeiro cheque
para facer que estes bytes que acabo de ler en comezar un JPEG.
Entón, se é cabeceira JPEG do noso buffer.
Agora, o que é cabeceira JPEG facendo?
Imos dar un ollo.
>> Ata aquí, vemos que esta función é volvendo un touro, e aquel touro -
ben aquí, estamos comprobando se cabeceira de cero é igual a este constante e
cabeceira un é igual a esta constante e cabeceira dous é igual a esta constante,
cabeceira de tres é igual a este ou esta constante, onde todos estes son constantes
só botar definido aquí e son exactamente o que contámosvos na especificación
que comeza cun formato JPEG.
E así, esta función só vai return true si este tapón representa
o inicio dun novo JPEG e falso en caso contrario.
>> Aceptar.
Entón, se isto non representa un novo JPEG, entón primeiro quero comprobar a ver se
Ficheiro JPEG non é igual a cero, caso en que o pechar.
E así, por que necesitamos comprobar a ver se non é nulo?
Ben, o primeiro JPEG que atopar non imos xa ten
un arquivo JPEG aberto.
E así, se tentar pechar iso, entón nós non estamos facendo algo certo.
>> Pero cada JPEG posterior que abrirmos, queremos pechar
o arquivo anterior.
Entón agora nós imos usar sprintf coma nós dixen antes, onde estamos a través da
nome do ficheiro JPEG tapón.
E nós imos usar ficheiro JPEG formato de nome como o noso formato.
E o que é iso?
Ata aquí, vemos que é cero por cento 3D.JPEG onde a tres cero só
di que usaremos tres enteiros a este Explique ceros.
Entón é así que nós imos chegar cero cero one.JPEG e de cero 10.JPEG e así por diante.
>> Nós imos utilizar sprintf.
E o enteiro que estamos inserindo na secuencia é JPEGs dormentes
recuperado, o cal é inicialmente cero.
Así, o primeiro ficheiro aberto vai para ser cero cero cero punto JPEG.
E despois imos incrementa-lo de xeito que o seguinte abrimos será cero cero
un punto JPEG e imos incrementa-lo novo polo que vai ser cero cero dous punto
JPEG e así por diante.
>> Todo ben.
Entón, agora o interior de arquivo JPEG nomear, temos o nome do
arquivo que queremos.
Podemos f abrir este ficheiro para a escrita.
Aceptar.
E unha vez máis, hai que comprobar a se Asegúrese de que o ficheiro correctamente
aberto, xa que se non o fixo, a continuación, houbo algún erro.
>> Polo tanto, agora temos obtido tras a iso é unha parte JPEG.
E aquí vemos que imos para escribir para o JPEG.
Pero primeiro temos esa verificación, que di se o ficheiro JPEG non é igual a cero.
Por que necesitamos diso?
Ben ficheiro JPEG é igual a cero cando ten actualmente un JPEG aberto.
>> E si tarxeta punto comeza materias con unha morea de bytes que
non representan un JPEG?
Entón nós imos querer saltar sobre eses bytes.
Se non temos esa verificación, entón estamos vai escribir a un pechado
presentar os primeiros 512 bytes de a tarxeta que non é bo.
Aceptar.
>> Así, supoñendo que temos un arquivo aberto, logo imos escribir para o ficheiro
512 bytes que dispoñemos no noso buffer.
E estamos unha vez máis para facer a comprobación Asegúrese de que os 512 bytes correctamente
foron escritas, porque se non fosen escrita correctamente, entón algo
deu errado.
Imos pechar os arquivos, imprimir que algo deu mal, e retorno.
Asumindo que todo vai ben, imos seguir pechando o looping
ficheiro antigo, abrindo o novo ficheiro, a escrita datos para o novo ficheiro, e así
ata que, finalmente, este f ler retorna cero, o que significa
que o arquivo está feito.
>> Polo tanto, agora que a lectura da tarxeta é máis, nós ver que nós imos pechar a f
último arquivo que tiñamos aberto, pero estamos comprobando se o ficheiro JPEG
non é igual a cero.
Así, o próximo f ten sentido porque, como estamos abrindo arquivos, estamos pechando
o ficheiro anterior, pero o último ficheiro que abrimos nunca está pechada.
Entón, iso é o que este fai.
>> Pero por que hai que comprobar a null?
Ben, o que se a tarxeta de punto prima non ter un único JPEG dentro del?
Neste caso, teriamos nunca abriu un arquivo.
E se nunca abrir un arquivo, debemos non tentar pechar este ficheiro.
Entón é iso que esta verificación está facendo.
>> Agora aquí, como dixen antes, poderíamos eclodiram que y lazo ou se
a tarxeta teña rematado, ou se existen algún erro de lectura da tarxeta.
Polo tanto, esta é a verificación para ver se había un erro de lectura da tarxeta, en
caso en que, imos dicir que non foi un erro ao ler.
Non queremos que o usuario a pensar todo foi correctamente.
E nós imos voltar un para o erro.
>> Finalmente, imos f pechar noso arquivo raw, nosa tarxeta de punto cru, para indicar que
todo foi ben e retorno cero e é iso.
>> O meu nome é Rob e esta foi Recover.
>> [Música tocando]