1 00:00:00,000 --> 00:00:00,494 2 00:00:00,494 --> 00:00:13,350 >> [Redare a muzicii] 3 00:00:13,350 --> 00:00:14,080 >> ROB BOWDEN: Hi. 4 00:00:14,080 --> 00:00:17,550 Sunt Rob, și să sperăm că această soluție vă ajută să pui 5 00:00:17,550 --> 00:00:19,600 pe drumul spre recuperare. 6 00:00:19,600 --> 00:00:22,700 Așa că hai să începem. 7 00:00:22,700 --> 00:00:25,660 >> Noi vedem că imediat suntem doar pentru a vă asigura că suntem 8 00:00:25,660 --> 00:00:27,170 folosind Recuperare corect. 9 00:00:27,170 --> 00:00:31,490 Deci, utilizarea ar trebui să fie doar ceva ca slash punct recupera. 10 00:00:31,490 --> 00:00:35,500 >> Acum vom deschide așteptate carte dot fișier prime. 11 00:00:35,500 --> 00:00:39,740 Vedem aici că suntem folosind constant nume de fișier de subliniere prime, 12 00:00:39,740 --> 00:00:44,200 care până aici avem hash definite ca carte dot prime. 13 00:00:44,200 --> 00:00:45,030 OK. 14 00:00:45,030 --> 00:00:48,210 >> Deci, avem nevoie să ne asigurăm că deschis cu succes pentru că în cazul în care 15 00:00:48,210 --> 00:00:51,150 nu, atunci ar trebui să ne avertiza utilizatorul. 16 00:00:51,150 --> 00:00:56,770 Dar presupunând că a făcut-o, suntem acum O să declare un buffer de dimensiune JPEG 17 00:00:56,770 --> 00:00:58,170 fișier lungime nume. 18 00:00:58,170 --> 00:01:02,060 Deci, acest lucru va fi tampon care vom sprintf în. 19 00:01:02,060 --> 00:01:04,360 >> Deci, ceea ce este JPEG fișier nume de lungime? 20 00:01:04,360 --> 00:01:08,490 Până aici, vom vedea că este hash definite ca opt. 21 00:01:08,490 --> 00:01:10,670 Deci, de ce opt? 22 00:01:10,670 --> 00:01:15,150 Ei bine, un fișier dat va fi numit ceva de genul zero, zero, zero. 23 00:01:15,150 --> 00:01:19,460 JPG și apoi avem nevoie de un backslash zero. 24 00:01:19,460 --> 00:01:22,720 Așa că am nevoie de un tampon care poate stoca opt caractere. 25 00:01:22,720 --> 00:01:25,190 Acum vom avea un contor care este va ține evidența 26 00:01:25,190 --> 00:01:27,780 JPEG număr am găsit. 27 00:01:27,780 --> 00:01:31,590 >> Și, în sfârșit, vom avea o Fișier JPEG care este inițial nul 28 00:01:31,590 --> 00:01:35,920 care va fi selectat în momentul respectiv fișier deschis că suntem scris. 29 00:01:35,920 --> 00:01:37,540 Acum vom avea un tampon suplimentar. 30 00:01:37,540 --> 00:01:41,350 Acest lucru nu este la fel ca sprintf nostru tampon în care acest tampon este cea 31 00:01:41,350 --> 00:01:45,020 pe care le citești în datele de pe cardul de dot prime. 32 00:01:45,020 --> 00:01:48,900 >> Deci, tamponul va fi de caractere nesemnate, pe care le puteți 33 00:01:48,900 --> 00:01:53,560 de fapt doar trata ne bytes, și este va fi de dimensiune marimea blocului 34 00:01:53,560 --> 00:01:57,950 în cazul în care, așa cum am să vă spun, mărimea blocului este de 512. 35 00:01:57,950 --> 00:02:03,070 Deci, JPEG, puteți trata totul ca blocuri de 512 octeți. 36 00:02:03,070 --> 00:02:05,890 >> Acum mergem la bucla pe întregul dosar. 37 00:02:05,890 --> 00:02:12,980 Vom f citi în tampon nostru un singur ori octet de mărime bloc din 38 00:02:12,980 --> 00:02:14,710 cardul dot fișier RAW. 39 00:02:14,710 --> 00:02:16,630 Acum, ce f citit întoarce? 40 00:02:16,630 --> 00:02:20,050 Se returnează numărul de elemente că a citit cu succes. 41 00:02:20,050 --> 00:02:27,310 Deci, dacă a reușit să citească de 512 bytes, atunci ne-o dorim pentru a vedea dacă acest lucru a fost o 42 00:02:27,310 --> 00:02:29,700 JPEG sau scrie-l într-un fișier JPEG. 43 00:02:29,700 --> 00:02:34,450 Și dacă aceasta nu sa mai întors de 512 bytes, apoi fie fișierul sa încheiat în 44 00:02:34,450 --> 00:02:37,870 caz în care vom iesi din y buclă, sau există un fel de eroare 45 00:02:37,870 --> 00:02:40,300 în cazul în care ne vom rupe, de asemenea, din y bucla, dar vom vrei să reclami 46 00:02:40,300 --> 00:02:41,990 că ceva a mers prost. 47 00:02:41,990 --> 00:02:42,290 >> OK. 48 00:02:42,290 --> 00:02:47,630 Deci, presupunând că am citit cu succes în 512 de bytes, vrem să verificați mai întâi 49 00:02:47,630 --> 00:02:53,070 pentru a face ca aceste bytes pe care le doar citit într începe un JPEG. 50 00:02:53,070 --> 00:02:56,430 Deci, dacă este antet JPEG de tampon noastre. 51 00:02:56,430 --> 00:02:58,460 Acum, ce se antet JPEG face? 52 00:02:58,460 --> 00:03:00,120 Să ne uităm. 53 00:03:00,120 --> 00:03:05,270 >> Până aici, vom vedea că această funcție este întoarce un taur, și că taur - 54 00:03:05,270 --> 00:03:08,820 Ei bine, aici, suntem de verificare pentru a vedea dacă antet de zero este egal cu această constantă și 55 00:03:08,820 --> 00:03:11,880 antet unul este egal cu această constantă și antet doi este egal cu această constantă, 56 00:03:11,880 --> 00:03:15,640 antet trei este egal cu aceasta sau această constantă unde toate aceste constante sunt 57 00:03:15,640 --> 00:03:20,340 doar hash definit aici și sunt exact ceea ce v-am spus în spec. 58 00:03:20,340 --> 00:03:22,700 că un JPEG începe cu. 59 00:03:22,700 --> 00:03:27,300 Și astfel această funcție este doar de gând să return true dacă acest tampon reprezintă 60 00:03:27,300 --> 00:03:31,750 începutul unui nou JPEG și false în caz contrar. 61 00:03:31,750 --> 00:03:32,520 >> OK. 62 00:03:32,520 --> 00:03:38,490 Deci, dacă acest lucru nu reprezintă un nou JPEG, apoi ne-o dorim în primul rând să verificați pentru a vedea dacă 63 00:03:38,490 --> 00:03:42,030 Fișier JPEG nu este egal cu zero, în cazul în care l-am închide. 64 00:03:42,030 --> 00:03:44,940 Și așa că de ce avem nevoie pentru a verifica pentru a vedea dacă nu este nul? 65 00:03:44,940 --> 00:03:48,980 Ei bine, prima JPEG pe care le găsi noi nu va avea deja 66 00:03:48,980 --> 00:03:50,440 un fișier JPEG deschis. 67 00:03:50,440 --> 00:03:55,580 Și astfel, în cazul în care vom încerca să închidă că, atunci noi nu facem ceva destul de bine. 68 00:03:55,580 --> 00:03:59,090 >> Dar fiecare JPEG ulterior că am deschis, ne-o dorim pentru a închide 69 00:03:59,090 --> 00:04:00,710 fișierul anterior. 70 00:04:00,710 --> 00:04:04,630 Deci, acum vom folosi sprintf ca noi a declarat înainte de unde suntem cu ajutorul 71 00:04:04,630 --> 00:04:06,280 nume de fișier tampon JPEG. 72 00:04:06,280 --> 00:04:09,870 Și am de gând să utilizeze fișier JPEG nume format ca formatul nostru. 73 00:04:09,870 --> 00:04:12,030 Și ce e asta? 74 00:04:12,030 --> 00:04:18,450 Până aici, vom vedea că acesta este de zero la suta 3D.JPEG în cazul în care trei de zero doar 75 00:04:18,450 --> 00:04:22,089 spune ca vom folosi trei numere întregi pentru acest căptușit cu zerouri. 76 00:04:22,089 --> 00:04:27,470 Deci, acesta este modul în care vom ajunge la zero la zero one.JPEG și zero, 10.JPEG și așa mai departe. 77 00:04:27,470 --> 00:04:29,060 >> Vom folosi sprintf. 78 00:04:29,060 --> 00:04:33,760 Și întreg care ne introduce în șirul este JPEG amorțite 79 00:04:33,760 --> 00:04:36,380 recuperat, care este inițial zero. 80 00:04:36,380 --> 00:04:39,950 Deci, primul dosar deschis se va să fie zero, zero, zero, punct JPEG. 81 00:04:39,950 --> 00:04:43,330 Și apoi ne-l incrementarea astfel imaginea următoare vom deschide va fi zero la zero 82 00:04:43,330 --> 00:04:46,830 un punct JPEG și vom incrementa din nou, asa ca va fi zero, zero, două puncte 83 00:04:46,830 --> 00:04:49,100 JPEG și așa mai departe. 84 00:04:49,100 --> 00:04:49,850 >> Bine. 85 00:04:49,850 --> 00:04:53,210 Deci, acum, în interiorul de fișier JPEG nume, avem numele a 86 00:04:53,210 --> 00:04:54,990 fișier pe care ne-o dorim. 87 00:04:54,990 --> 00:04:58,640 Putem f deschide fișierul pentru scriere. 88 00:04:58,640 --> 00:04:59,170 OK. 89 00:04:59,170 --> 00:05:02,820 Și încă o dată, avem nevoie pentru a verifica pentru a face sigur că fișierul cu succes 90 00:05:02,820 --> 00:05:08,460 deschis deoarece în cazul în care a făcut-o nu, atunci au existat unele erori. 91 00:05:08,460 --> 00:05:13,100 >> Deci, acum am ajuns trecut este aceasta o parte JPEG. 92 00:05:13,100 --> 00:05:16,390 Și aici, vedem vom pentru a scrie la JPEG. 93 00:05:16,390 --> 00:05:20,980 Dar trebuie mai întâi această verificare, care spune dacă fișierul JPEG nu este egal cu zero. 94 00:05:20,980 --> 00:05:22,490 De ce avem nevoie de asta? 95 00:05:22,490 --> 00:05:28,020 Ei bine fișier JPEG este egal cu zero, atunci când ne-am au în prezent un JPEG deschis. 96 00:05:28,020 --> 00:05:31,870 >> Ce se întâmplă dacă începe prima carte dot cu o grămadă de bytes care 97 00:05:31,870 --> 00:05:33,510 nu reprezintă un JPEG? 98 00:05:33,510 --> 00:05:36,240 Apoi ne-am de gând să doriți să săriți peste aceste bytes. 99 00:05:36,240 --> 00:05:39,600 Dacă nu avem această verificare, atunci suntem de gând să scrie la un nedeschis 100 00:05:39,600 --> 00:05:45,540 fișier primele 512 de bytes de cardul care nu este bun. 101 00:05:45,540 --> 00:05:46,030 OK. 102 00:05:46,030 --> 00:05:51,330 >> Deci, presupunând că avem un fișier deschis, apoi vom scrie că dosarul 103 00:05:51,330 --> 00:05:53,290 512 bytes pe care le avem în tampon nostru. 104 00:05:53,290 --> 00:05:57,390 Și suntem din nou de verificare pentru a face vă că 512 de bytes cu succes 105 00:05:57,390 --> 00:06:01,140 au fost scrise pentru că în cazul în care nu au fost scris cu succes, atunci ceva 106 00:06:01,140 --> 00:06:02,080 a mers prost. 107 00:06:02,080 --> 00:06:06,540 Vom închide dosarele noastre, imprimați că ceva a mers prost, și retur. 108 00:06:06,540 --> 00:06:10,940 Presupunând că totul merge corect, atunci vom continua looping închiderea 109 00:06:10,940 --> 00:06:15,060 fișier vechi, deschiderea nou dosar, scris date la noul fișier, și așa 110 00:06:15,060 --> 00:06:20,990 până când în cele din urmă, acest lucru f citit returnează zero, ceea ce înseamnă 111 00:06:20,990 --> 00:06:23,280 că fișierul este de facut. 112 00:06:23,280 --> 00:06:28,490 >> Deci, acum că citirea cardului este de peste, ne-am vedea că vom f închide 113 00:06:28,490 --> 00:06:33,250 ultimul fișier care am avut deschise, dar vom verifica dacă fișierul JPEG 114 00:06:33,250 --> 00:06:34,900 nu este egal cu zero. 115 00:06:34,900 --> 00:06:39,520 Ei bine, f Închideți are sens, deoarece în calitate de suntem deschiderea fișierelor, suntem de închidere 116 00:06:39,520 --> 00:06:43,870 fișierul anterior, dar cel din urmă fișier pe care am deschis nu se închide. 117 00:06:43,870 --> 00:06:45,580 Deci, asta e ceea ce acest lucru este de a face. 118 00:06:45,580 --> 00:06:47,720 >> Dar de ce avem nevoie pentru a verifica pentru nul? 119 00:06:47,720 --> 00:06:53,130 Ei bine, ce dacă card de punct prime nu au un singur JPEG în interiorul de ea? 120 00:06:53,130 --> 00:06:56,640 În acest caz, vom avea nu a deschis un fișier. 121 00:06:56,640 --> 00:07:00,230 Și dacă nu ne-am deschide un fișier, ar trebui să ne nu încercați să închideți acel fișier. 122 00:07:00,230 --> 00:07:03,000 Deci, asta e ceea ce această verificare este de a face. 123 00:07:03,000 --> 00:07:07,880 >> Acum, aici, așa cum am spus mai înainte, ne-am putea au izbucnit că y bucla, fie în cazul în care 124 00:07:07,880 --> 00:07:13,520 cardul sa încheiat sau dacă există unele eroare de citire de pe card. 125 00:07:13,520 --> 00:07:16,680 Deci, acest lucru este de verificare pentru a vedea dacă a existat o eroare de citire de pe card, în 126 00:07:16,680 --> 00:07:19,400 caz în care, vom spune acolo a fost o eroare de citire. 127 00:07:19,400 --> 00:07:22,130 Noi nu vrem ca utilizatorul să gândească totul a decurs cu succes. 128 00:07:22,130 --> 00:07:24,750 Și vom returna unul de eroare. 129 00:07:24,750 --> 00:07:29,580 >> În cele din urmă, vom f închide dosarul nostru prime, cartea noastra de dot prime, pentru a indica faptul că 130 00:07:29,580 --> 00:07:34,070 totul a mers bine și retur zero, și asta e tot. 131 00:07:34,070 --> 00:07:36,130 >> Numele meu este Rob și acest lucru a fost Recover. 132 00:07:36,130 --> 00:07:42,102 >> [Redare a muzicii]